Lines Matching +full:ieee80211 +full:- +full:freq +full:- +full:limit

1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
3 * Copyright (C) 2012-2014, 2018-2023 Intel Corporation
4 * Copyright (C) 2013-2015 Intel Mobile Communications GmbH
5 * Copyright (C) 2016-2017 Intel Deutschland GmbH
9 #include <linux/ieee80211.h>
15 #include "iwl-io.h"
17 #include "iwl-modparams.h"
18 #include "iwl-drv.h"
19 #include "fw/error-dump.h"
20 #include "fw/api/phy-ctxt.h"
26 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_ctdp_budget_read()
31 return -EOPNOTSUPP; in iwl_dbgfs_ctdp_budget_read()
34 mvm->fwrt.cur_fw_img != IWL_UCODE_REGULAR) in iwl_dbgfs_ctdp_budget_read()
35 return -EIO; in iwl_dbgfs_ctdp_budget_read()
37 mutex_lock(&mvm->mutex); in iwl_dbgfs_ctdp_budget_read()
39 mutex_unlock(&mvm->mutex); in iwl_dbgfs_ctdp_budget_read()
65 return -EOPNOTSUPP; in iwl_dbgfs_stop_ctdp_write()
68 mvm->fwrt.cur_fw_img != IWL_UCODE_REGULAR) in iwl_dbgfs_stop_ctdp_write()
69 return -EIO; in iwl_dbgfs_stop_ctdp_write()
71 mutex_lock(&mvm->mutex); in iwl_dbgfs_stop_ctdp_write()
73 mutex_unlock(&mvm->mutex); in iwl_dbgfs_stop_ctdp_write()
95 return -EOPNOTSUPP; in iwl_dbgfs_start_ctdp_write()
98 mvm->fwrt.cur_fw_img != IWL_UCODE_REGULAR) in iwl_dbgfs_start_ctdp_write()
99 return -EIO; in iwl_dbgfs_start_ctdp_write()
101 mutex_lock(&mvm->mutex); in iwl_dbgfs_start_ctdp_write()
103 mutex_unlock(&mvm->mutex); in iwl_dbgfs_start_ctdp_write()
112 mvm->fwrt.cur_fw_img != IWL_UCODE_REGULAR) in iwl_dbgfs_force_ctkill_write()
113 return -EIO; in iwl_dbgfs_force_ctkill_write()
127 mvm->fwrt.cur_fw_img != IWL_UCODE_REGULAR) in iwl_dbgfs_tx_flush_write()
128 return -EIO; in iwl_dbgfs_tx_flush_write()
131 return -EINVAL; in iwl_dbgfs_tx_flush_write()
137 mutex_lock(&mvm->mutex); in iwl_dbgfs_tx_flush_write()
140 mutex_unlock(&mvm->mutex); in iwl_dbgfs_tx_flush_write()
147 mutex_lock(&mvm->mutex); in iwl_dbgfs_tx_flush_write()
149 mutex_unlock(&mvm->mutex); in iwl_dbgfs_tx_flush_write()
161 mvm->fwrt.cur_fw_img != IWL_UCODE_REGULAR) in iwl_dbgfs_sta_drain_write()
162 return -EIO; in iwl_dbgfs_sta_drain_write()
165 return -EINVAL; in iwl_dbgfs_sta_drain_write()
166 if (sta_id < 0 || sta_id >= mvm->fw->ucode_capa.num_stations) in iwl_dbgfs_sta_drain_write()
167 return -EINVAL; in iwl_dbgfs_sta_drain_write()
169 return -EINVAL; in iwl_dbgfs_sta_drain_write()
171 mutex_lock(&mvm->mutex); in iwl_dbgfs_sta_drain_write()
176 ret = -ENOENT; in iwl_dbgfs_sta_drain_write()
180 mutex_unlock(&mvm->mutex); in iwl_dbgfs_sta_drain_write()
188 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_sram_read()
195 return -EINVAL; in iwl_dbgfs_sram_read()
198 img = &mvm->fw->img[mvm->fwrt.cur_fw_img]; in iwl_dbgfs_sram_read()
199 ofs = img->sec[IWL_UCODE_SECTION_DATA].offset; in iwl_dbgfs_sram_read()
200 len = img->sec[IWL_UCODE_SECTION_DATA].len; in iwl_dbgfs_sram_read()
202 if (mvm->dbgfs_sram_len) { in iwl_dbgfs_sram_read()
203 ofs = mvm->dbgfs_sram_offset; in iwl_dbgfs_sram_read()
204 len = mvm->dbgfs_sram_len; in iwl_dbgfs_sram_read()
209 return -ENOMEM; in iwl_dbgfs_sram_read()
211 iwl_trans_read_mem_bytes(mvm->trans, ofs, ptr, len); in iwl_dbgfs_sram_read()
228 return -EINVAL; in iwl_dbgfs_sram_write()
230 img = &mvm->fw->img[mvm->fwrt.cur_fw_img]; in iwl_dbgfs_sram_write()
231 img_offset = img->sec[IWL_UCODE_SECTION_DATA].offset; in iwl_dbgfs_sram_write()
232 img_len = img->sec[IWL_UCODE_SECTION_DATA].len; in iwl_dbgfs_sram_write()
236 return -EINVAL; in iwl_dbgfs_sram_write()
239 return -EINVAL; in iwl_dbgfs_sram_write()
241 mvm->dbgfs_sram_offset = offset; in iwl_dbgfs_sram_write()
242 mvm->dbgfs_sram_len = len; in iwl_dbgfs_sram_write()
244 mvm->dbgfs_sram_offset = 0; in iwl_dbgfs_sram_write()
245 mvm->dbgfs_sram_len = 0; in iwl_dbgfs_sram_write()
255 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_set_nic_temperature_read()
259 if (!mvm->temperature_test) in iwl_dbgfs_set_nic_temperature_read()
262 pos = scnprintf(buf, sizeof(buf), "%d\n", mvm->temperature); in iwl_dbgfs_set_nic_temperature_read()
270 * Enable: any value between IWL_MVM_DEBUG_SET_TEMPERATURE_MIN -
280 if (!iwl_mvm_firmware_running(mvm) && !mvm->temperature_test) in iwl_dbgfs_set_nic_temperature_write()
281 return -EIO; in iwl_dbgfs_set_nic_temperature_write()
284 return -EINVAL; in iwl_dbgfs_set_nic_temperature_write()
289 return -EINVAL; in iwl_dbgfs_set_nic_temperature_write()
291 mutex_lock(&mvm->mutex); in iwl_dbgfs_set_nic_temperature_write()
293 if (!mvm->temperature_test) in iwl_dbgfs_set_nic_temperature_write()
296 mvm->temperature_test = false; in iwl_dbgfs_set_nic_temperature_write()
301 mvm->temperature = 0; in iwl_dbgfs_set_nic_temperature_write()
303 mvm->temperature_test = true; in iwl_dbgfs_set_nic_temperature_write()
304 mvm->temperature = temperature; in iwl_dbgfs_set_nic_temperature_write()
307 mvm->temperature_test ? "En" : "Dis", in iwl_dbgfs_set_nic_temperature_write()
308 mvm->temperature); in iwl_dbgfs_set_nic_temperature_write()
313 mutex_unlock(&mvm->mutex); in iwl_dbgfs_set_nic_temperature_write()
322 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_nic_temp_read()
328 return -EIO; in iwl_dbgfs_nic_temp_read()
330 mutex_lock(&mvm->mutex); in iwl_dbgfs_nic_temp_read()
332 mutex_unlock(&mvm->mutex); in iwl_dbgfs_nic_temp_read()
335 return -EIO; in iwl_dbgfs_nic_temp_read()
347 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_sar_geo_profile_read()
354 return -EIO; in iwl_dbgfs_sar_geo_profile_read()
356 mutex_lock(&mvm->mutex); in iwl_dbgfs_sar_geo_profile_read()
359 mutex_unlock(&mvm->mutex); in iwl_dbgfs_sar_geo_profile_read()
367 pos += scnprintf(buf + pos, bufsz - pos, in iwl_dbgfs_sar_geo_profile_read()
369 pos += scnprintf(buf + pos, bufsz - pos, in iwl_dbgfs_sar_geo_profile_read()
371 mvm->fwrt.geo_profiles[tbl_idx - 1].bands[0].chains[0], in iwl_dbgfs_sar_geo_profile_read()
372 mvm->fwrt.geo_profiles[tbl_idx - 1].bands[0].chains[1], in iwl_dbgfs_sar_geo_profile_read()
373 mvm->fwrt.geo_profiles[tbl_idx - 1].bands[0].max); in iwl_dbgfs_sar_geo_profile_read()
374 pos += scnprintf(buf + pos, bufsz - pos, in iwl_dbgfs_sar_geo_profile_read()
376 mvm->fwrt.geo_profiles[tbl_idx - 1].bands[1].chains[0], in iwl_dbgfs_sar_geo_profile_read()
377 mvm->fwrt.geo_profiles[tbl_idx - 1].bands[1].chains[1], in iwl_dbgfs_sar_geo_profile_read()
378 mvm->fwrt.geo_profiles[tbl_idx - 1].bands[1].max); in iwl_dbgfs_sar_geo_profile_read()
380 mutex_unlock(&mvm->mutex); in iwl_dbgfs_sar_geo_profile_read()
389 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_wifi_6e_enable_read()
394 err = iwl_acpi_get_dsm_u32(mvm->fwrt.dev, 0, in iwl_dbgfs_wifi_6e_enable_read()
409 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_stations_read()
414 mutex_lock(&mvm->mutex); in iwl_dbgfs_stations_read()
416 for (i = 0; i < mvm->fw->ucode_capa.num_stations; i++) { in iwl_dbgfs_stations_read()
417 pos += scnprintf(buf + pos, bufsz - pos, "%.2d: ", i); in iwl_dbgfs_stations_read()
418 sta = rcu_dereference_protected(mvm->fw_id_to_mac_id[i], in iwl_dbgfs_stations_read()
419 lockdep_is_held(&mvm->mutex)); in iwl_dbgfs_stations_read()
421 pos += scnprintf(buf + pos, bufsz - pos, "N/A\n"); in iwl_dbgfs_stations_read()
423 pos += scnprintf(buf + pos, bufsz - pos, "%ld\n", in iwl_dbgfs_stations_read()
426 pos += scnprintf(buf + pos, bufsz - pos, "%pM\n", in iwl_dbgfs_stations_read()
427 sta->addr); in iwl_dbgfs_stations_read()
430 mutex_unlock(&mvm->mutex); in iwl_dbgfs_stations_read()
442 struct iwl_lq_sta_rs_fw *lq_sta = &mvm_link_sta->lq_sta.rs_fw; in iwl_dbgfs_rs_data_read()
450 return -ENOMEM; in iwl_dbgfs_rs_data_read()
452 desc += scnprintf(buff + desc, bufsz - desc, "sta_id %d\n", in iwl_dbgfs_rs_data_read()
453 lq_sta->pers.sta_id); in iwl_dbgfs_rs_data_read()
454 desc += scnprintf(buff + desc, bufsz - desc, in iwl_dbgfs_rs_data_read()
456 lq_sta->pers.dbg_fixed_rate); in iwl_dbgfs_rs_data_read()
457 desc += scnprintf(buff + desc, bufsz - desc, in iwl_dbgfs_rs_data_read()
458 "A-MPDU size limit %d\n", in iwl_dbgfs_rs_data_read()
459 lq_sta->pers.dbg_agg_frame_count_lim); in iwl_dbgfs_rs_data_read()
460 desc += scnprintf(buff + desc, bufsz - desc, in iwl_dbgfs_rs_data_read()
464 desc += scnprintf(buff + desc, bufsz - desc, in iwl_dbgfs_rs_data_read()
466 lq_sta->last_rate_n_flags); in iwl_dbgfs_rs_data_read()
468 desc += rs_pretty_print_rate(buff + desc, bufsz - desc, in iwl_dbgfs_rs_data_read()
469 lq_sta->last_rate_n_flags); in iwl_dbgfs_rs_data_read()
470 if (desc < bufsz - 1) in iwl_dbgfs_rs_data_read()
489 return -EINVAL; in iwl_dbgfs_amsdu_len_write()
491 /* only change from debug set <-> debug unset */ in iwl_dbgfs_amsdu_len_write()
492 if (amsdu_len && mvm_link_sta->orig_amsdu_len) in iwl_dbgfs_amsdu_len_write()
493 return -EBUSY; in iwl_dbgfs_amsdu_len_write()
496 mvm_link_sta->orig_amsdu_len = link_sta->agg.max_amsdu_len; in iwl_dbgfs_amsdu_len_write()
497 link_sta->agg.max_amsdu_len = amsdu_len; in iwl_dbgfs_amsdu_len_write()
498 link_sta->agg.max_amsdu_len = amsdu_len; in iwl_dbgfs_amsdu_len_write()
499 for (i = 0; i < ARRAY_SIZE(link_sta->agg.max_tid_amsdu_len); i++) in iwl_dbgfs_amsdu_len_write()
500 link_sta->agg.max_tid_amsdu_len[i] = amsdu_len; in iwl_dbgfs_amsdu_len_write()
502 link_sta->agg.max_amsdu_len = mvm_link_sta->orig_amsdu_len; in iwl_dbgfs_amsdu_len_write()
503 mvm_link_sta->orig_amsdu_len = 0; in iwl_dbgfs_amsdu_len_write()
506 ieee80211_sta_recalc_aggregates(link_sta->sta); in iwl_dbgfs_amsdu_len_write()
522 link_sta->agg.max_amsdu_len); in iwl_dbgfs_amsdu_len_read()
523 pos += scnprintf(buf + pos, sizeof(buf) - pos, "stored %d\n", in iwl_dbgfs_amsdu_len_read()
524 mvm_link_sta->orig_amsdu_len); in iwl_dbgfs_amsdu_len_read()
533 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_disable_power_off_read()
538 pos += scnprintf(buf+pos, bufsz-pos, "disable_power_off_d0=%d\n", in iwl_dbgfs_disable_power_off_read()
539 mvm->disable_power_off); in iwl_dbgfs_disable_power_off_read()
540 pos += scnprintf(buf+pos, bufsz-pos, "disable_power_off_d3=%d\n", in iwl_dbgfs_disable_power_off_read()
541 mvm->disable_power_off_d3); in iwl_dbgfs_disable_power_off_read()
552 return -EIO; in iwl_dbgfs_disable_power_off_write()
556 return -EINVAL; in iwl_dbgfs_disable_power_off_write()
557 mvm->disable_power_off = val; in iwl_dbgfs_disable_power_off_write()
560 return -EINVAL; in iwl_dbgfs_disable_power_off_write()
561 mvm->disable_power_off_d3 = val; in iwl_dbgfs_disable_power_off_write()
563 return -EINVAL; in iwl_dbgfs_disable_power_off_write()
566 mutex_lock(&mvm->mutex); in iwl_dbgfs_disable_power_off_write()
568 mutex_unlock(&mvm->mutex); in iwl_dbgfs_disable_power_off_write()
577 pos += scnprintf(buf+pos, bufsz-pos, "MBOX dw0:\n"); in iwl_mvm_coex_dump_mbox()
591 pos += scnprintf(buf+pos, bufsz-pos, "MBOX dw1:\n"); in iwl_mvm_coex_dump_mbox()
600 pos += scnprintf(buf+pos, bufsz-pos, "MBOX dw2:\n"); in iwl_mvm_coex_dump_mbox()
613 pos += scnprintf(buf+pos, bufsz-pos, "MBOX dw3:\n"); in iwl_mvm_coex_dump_mbox()
636 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_bt_notif_read()
637 struct iwl_bt_coex_profile_notif *notif = &mvm->last_bt_notif; in iwl_dbgfs_bt_notif_read()
643 return -ENOMEM; in iwl_dbgfs_bt_notif_read()
645 mutex_lock(&mvm->mutex); in iwl_dbgfs_bt_notif_read()
649 pos += scnprintf(buf + pos, bufsz - pos, "bt_ci_compliance = %d\n", in iwl_dbgfs_bt_notif_read()
650 notif->bt_ci_compliance); in iwl_dbgfs_bt_notif_read()
651 pos += scnprintf(buf + pos, bufsz - pos, "primary_ch_lut = %d\n", in iwl_dbgfs_bt_notif_read()
652 le32_to_cpu(notif->primary_ch_lut)); in iwl_dbgfs_bt_notif_read()
653 pos += scnprintf(buf + pos, bufsz - pos, "secondary_ch_lut = %d\n", in iwl_dbgfs_bt_notif_read()
654 le32_to_cpu(notif->secondary_ch_lut)); in iwl_dbgfs_bt_notif_read()
656 bufsz - pos, "bt_activity_grading = %d\n", in iwl_dbgfs_bt_notif_read()
657 le32_to_cpu(notif->bt_activity_grading)); in iwl_dbgfs_bt_notif_read()
658 pos += scnprintf(buf + pos, bufsz - pos, "bt_rrc = %d\n", in iwl_dbgfs_bt_notif_read()
659 notif->rrc_status & 0xF); in iwl_dbgfs_bt_notif_read()
660 pos += scnprintf(buf + pos, bufsz - pos, "bt_ttc = %d\n", in iwl_dbgfs_bt_notif_read()
661 notif->ttc_status & 0xF); in iwl_dbgfs_bt_notif_read()
663 pos += scnprintf(buf + pos, bufsz - pos, "sync_sco = %d\n", in iwl_dbgfs_bt_notif_read()
665 pos += scnprintf(buf + pos, bufsz - pos, "mplut = %d\n", in iwl_dbgfs_bt_notif_read()
668 mutex_unlock(&mvm->mutex); in iwl_dbgfs_bt_notif_read()
680 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_bt_cmd_read()
681 struct iwl_bt_coex_ci_cmd *cmd = &mvm->last_bt_ci_cmd; in iwl_dbgfs_bt_cmd_read()
686 mutex_lock(&mvm->mutex); in iwl_dbgfs_bt_cmd_read()
688 pos += scnprintf(buf + pos, bufsz - pos, "Channel inhibition CMD\n"); in iwl_dbgfs_bt_cmd_read()
689 pos += scnprintf(buf + pos, bufsz - pos, in iwl_dbgfs_bt_cmd_read()
691 le64_to_cpu(cmd->bt_primary_ci)); in iwl_dbgfs_bt_cmd_read()
692 pos += scnprintf(buf + pos, bufsz - pos, in iwl_dbgfs_bt_cmd_read()
694 le64_to_cpu(cmd->bt_secondary_ci)); in iwl_dbgfs_bt_cmd_read()
696 mutex_unlock(&mvm->mutex); in iwl_dbgfs_bt_cmd_read()
708 return -EINVAL; in iwl_dbgfs_bt_tx_prio_write()
710 return -EINVAL; in iwl_dbgfs_bt_tx_prio_write()
712 mvm->bt_tx_prio = bt_tx_prio; in iwl_dbgfs_bt_tx_prio_write()
735 mutex_lock(&mvm->mutex); in iwl_dbgfs_bt_force_ant_write()
736 if (mvm->bt_force_ant_mode == bt_force_ant_mode) in iwl_dbgfs_bt_force_ant_write()
739 mvm->bt_force_ant_mode = bt_force_ant_mode; in iwl_dbgfs_bt_force_ant_write()
741 modes_str[mvm->bt_force_ant_mode]); in iwl_dbgfs_bt_force_ant_write()
749 mutex_unlock(&mvm->mutex); in iwl_dbgfs_bt_force_ant_write()
756 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_fw_ver_read()
764 return -ENOMEM; in iwl_dbgfs_fw_ver_read()
769 pos += scnprintf(pos, endpos - pos, "FW prefix: %s\n", in iwl_dbgfs_fw_ver_read()
770 iwl_drv_get_fwname_pre(mvm->trans, _fw_name_pre)); in iwl_dbgfs_fw_ver_read()
771 pos += scnprintf(pos, endpos - pos, "FW: %s\n", in iwl_dbgfs_fw_ver_read()
772 mvm->fwrt.fw->human_readable); in iwl_dbgfs_fw_ver_read()
773 pos += scnprintf(pos, endpos - pos, "Device: %s\n", in iwl_dbgfs_fw_ver_read()
774 mvm->fwrt.trans->name); in iwl_dbgfs_fw_ver_read()
775 pos += scnprintf(pos, endpos - pos, "Bus: %s\n", in iwl_dbgfs_fw_ver_read()
776 mvm->fwrt.dev->bus->name); in iwl_dbgfs_fw_ver_read()
778 ret = simple_read_from_buffer(user_buf, count, ppos, buff, pos - buff); in iwl_dbgfs_fw_ver_read()
788 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_tas_get_status_read()
797 "Due To SAR Limit Less Than 6 dBm", in iwl_dbgfs_tas_get_status_read()
824 return -ENODEV; in iwl_dbgfs_tas_get_status_read()
826 mutex_lock(&mvm->mutex); in iwl_dbgfs_tas_get_status_read()
828 mutex_unlock(&mvm->mutex); in iwl_dbgfs_tas_get_status_read()
834 return -ENOMEM; in iwl_dbgfs_tas_get_status_read()
838 rsp = (void *)hcmd.resp_pkt->data; in iwl_dbgfs_tas_get_status_read()
840 pos += scnprintf(pos, endpos - pos, "TAS Conclusion:\n"); in iwl_dbgfs_tas_get_status_read()
841 for (i = 0; i < rsp->in_dual_radio + 1; i++) { in iwl_dbgfs_tas_get_status_read()
842 if (rsp->tas_status_mac[i].band != TAS_LMAC_BAND_INVALID && in iwl_dbgfs_tas_get_status_read()
843 rsp->tas_status_mac[i].dynamic_status & BIT(TAS_DYNA_ACTIVE)) { in iwl_dbgfs_tas_get_status_read()
844 pos += scnprintf(pos, endpos - pos, "\tON for "); in iwl_dbgfs_tas_get_status_read()
845 switch (rsp->tas_status_mac[i].band) { in iwl_dbgfs_tas_get_status_read()
847 pos += scnprintf(pos, endpos - pos, "HB\n"); in iwl_dbgfs_tas_get_status_read()
850 pos += scnprintf(pos, endpos - pos, "LB\n"); in iwl_dbgfs_tas_get_status_read()
853 pos += scnprintf(pos, endpos - pos, "UHB\n"); in iwl_dbgfs_tas_get_status_read()
856 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_tas_get_status_read()
860 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_tas_get_status_read()
862 rsp->tas_status_mac[i].band); in iwl_dbgfs_tas_get_status_read()
869 pos += scnprintf(pos, endpos - pos, "\tOFF\n"); in iwl_dbgfs_tas_get_status_read()
871 pos += scnprintf(pos, endpos - pos, "TAS Report\n"); in iwl_dbgfs_tas_get_status_read()
872 pos += scnprintf(pos, endpos - pos, "TAS FW version: %d\n", in iwl_dbgfs_tas_get_status_read()
873 rsp->tas_fw_version); in iwl_dbgfs_tas_get_status_read()
874 pos += scnprintf(pos, endpos - pos, "Is UHB enabled for USA?: %s\n", in iwl_dbgfs_tas_get_status_read()
875 rsp->is_uhb_for_usa_enable ? "True" : "False"); in iwl_dbgfs_tas_get_status_read()
876 pos += scnprintf(pos, endpos - pos, "Current MCC: 0x%x\n", in iwl_dbgfs_tas_get_status_read()
877 le16_to_cpu(rsp->curr_mcc)); in iwl_dbgfs_tas_get_status_read()
879 pos += scnprintf(pos, endpos - pos, "Block list entries:"); in iwl_dbgfs_tas_get_status_read()
881 pos += scnprintf(pos, endpos - pos, " 0x%x", in iwl_dbgfs_tas_get_status_read()
882 le16_to_cpu(rsp->block_list[i])); in iwl_dbgfs_tas_get_status_read()
884 pos += scnprintf(pos, endpos - pos, "\nOEM name: %s\n", in iwl_dbgfs_tas_get_status_read()
886 pos += scnprintf(pos, endpos - pos, "\tVendor In Approved List: %s\n", in iwl_dbgfs_tas_get_status_read()
888 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_tas_get_status_read()
890 rsp->in_dual_radio ? "TRUE" : "FALSE"); in iwl_dbgfs_tas_get_status_read()
892 for (i = 0; i < rsp->in_dual_radio + 1; i++) { in iwl_dbgfs_tas_get_status_read()
893 if (rsp->tas_status_mac[i].static_status == 0) { in iwl_dbgfs_tas_get_status_read()
894 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_tas_get_status_read()
896 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_tas_get_status_read()
902 pos += scnprintf(pos, endpos - pos, "TAS status for "); in iwl_dbgfs_tas_get_status_read()
903 switch (rsp->tas_status_mac[i].band) { in iwl_dbgfs_tas_get_status_read()
905 pos += scnprintf(pos, endpos - pos, "High band\n"); in iwl_dbgfs_tas_get_status_read()
908 pos += scnprintf(pos, endpos - pos, "Low band\n"); in iwl_dbgfs_tas_get_status_read()
911 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_tas_get_status_read()
915 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_tas_get_status_read()
919 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_tas_get_status_read()
921 rsp->tas_status_mac[i].band); in iwl_dbgfs_tas_get_status_read()
924 pos += scnprintf(pos, endpos - pos, "Static status: %sabled\n", in iwl_dbgfs_tas_get_status_read()
925 rsp->tas_status_mac[i].static_status ? in iwl_dbgfs_tas_get_status_read()
927 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_tas_get_status_read()
929 if (rsp->tas_status_mac[i].static_dis_reason < TAS_DISABLED_REASON_MAX) in iwl_dbgfs_tas_get_status_read()
930 pos += scnprintf(pos, endpos - pos, "%s (%d)\n", in iwl_dbgfs_tas_get_status_read()
931 tas_dis_reason[rsp->tas_status_mac[i].static_dis_reason], in iwl_dbgfs_tas_get_status_read()
932 rsp->tas_status_mac[i].static_dis_reason); in iwl_dbgfs_tas_get_status_read()
934 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_tas_get_status_read()
936 rsp->tas_status_mac[i].static_dis_reason); in iwl_dbgfs_tas_get_status_read()
938 pos += scnprintf(pos, endpos - pos, "Dynamic status:\n"); in iwl_dbgfs_tas_get_status_read()
939 dyn_status = (rsp->tas_status_mac[i].dynamic_status); in iwl_dbgfs_tas_get_status_read()
942 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_tas_get_status_read()
947 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_tas_get_status_read()
949 rsp->tas_status_mac[i].near_disconnection ? in iwl_dbgfs_tas_get_status_read()
951 tmp = le16_to_cpu(rsp->tas_status_mac[i].max_reg_pwr_limit); in iwl_dbgfs_tas_get_status_read()
952 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_tas_get_status_read()
953 "Max. regulatory pwr limit (dBm): %d.%03d\n", in iwl_dbgfs_tas_get_status_read()
955 tmp = le16_to_cpu(rsp->tas_status_mac[i].sar_limit); in iwl_dbgfs_tas_get_status_read()
956 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_tas_get_status_read()
957 "SAR limit (dBm): %d.%03d\n", in iwl_dbgfs_tas_get_status_read()
962 ret = simple_read_from_buffer(user_buf, count, ppos, buff, pos - buff); in iwl_dbgfs_tas_get_status_read()
972 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_phy_integration_ver_read()
978 bufsz = mvm->fw->phy_integration_ver_len + 2; in iwl_dbgfs_phy_integration_ver_read()
981 return -ENOMEM; in iwl_dbgfs_phy_integration_ver_read()
983 pos = scnprintf(buf, bufsz, "%.*s\n", mvm->fw->phy_integration_ver_len, in iwl_dbgfs_phy_integration_ver_read()
984 mvm->fw->phy_integration_ver); in iwl_dbgfs_phy_integration_ver_read()
993 pos += scnprintf(buf + pos, bufsz - pos, \
995 le32_to_cpu(_struct->_memb))
1001 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_fw_rx_stats_read()
1002 static const char *fmt_table = "\t%-30s %10u\n"; in iwl_dbgfs_fw_rx_stats_read()
1003 static const char *fmt_header = "%-32s\n"; in iwl_dbgfs_fw_rx_stats_read()
1008 u8 cmd_ver = iwl_fw_lookup_cmd_ver(mvm->fw, in iwl_dbgfs_fw_rx_stats_read()
1014 return -EOPNOTSUPP; in iwl_dbgfs_fw_rx_stats_read()
1026 return -ENOMEM; in iwl_dbgfs_fw_rx_stats_read()
1028 mutex_lock(&mvm->mutex); in iwl_dbgfs_fw_rx_stats_read()
1033 pos += scnprintf(buf + pos, bufsz - pos, fmt_header, in iwl_dbgfs_fw_rx_stats_read()
1034 "Statistics_Rx - OFDM"); in iwl_dbgfs_fw_rx_stats_read()
1036 struct mvm_statistics_rx_phy_v2 *ofdm = &mvm->rx_stats_v3.ofdm; in iwl_dbgfs_fw_rx_stats_read()
1059 struct mvm_statistics_rx_phy *ofdm = &mvm->rx_stats.ofdm; in iwl_dbgfs_fw_rx_stats_read()
1068 pos += scnprintf(buf + pos, bufsz - pos, fmt_header, in iwl_dbgfs_fw_rx_stats_read()
1069 "Statistics_Rx - CCK"); in iwl_dbgfs_fw_rx_stats_read()
1071 struct mvm_statistics_rx_phy_v2 *cck = &mvm->rx_stats_v3.cck; in iwl_dbgfs_fw_rx_stats_read()
1094 struct mvm_statistics_rx_phy *cck = &mvm->rx_stats.cck; in iwl_dbgfs_fw_rx_stats_read()
1103 pos += scnprintf(buf + pos, bufsz - pos, fmt_header, in iwl_dbgfs_fw_rx_stats_read()
1104 "Statistics_Rx - GENERAL"); in iwl_dbgfs_fw_rx_stats_read()
1107 &mvm->rx_stats_v3.general; in iwl_dbgfs_fw_rx_stats_read()
1135 &mvm->rx_stats.general; in iwl_dbgfs_fw_rx_stats_read()
1159 pos += scnprintf(buf + pos, bufsz - pos, fmt_header, in iwl_dbgfs_fw_rx_stats_read()
1160 "Statistics_Rx - HT"); in iwl_dbgfs_fw_rx_stats_read()
1163 &mvm->rx_stats_v3.ofdm_ht; in iwl_dbgfs_fw_rx_stats_read()
1177 &mvm->rx_stats.ofdm_ht; in iwl_dbgfs_fw_rx_stats_read()
1185 mutex_unlock(&mvm->mutex); in iwl_dbgfs_fw_rx_stats_read()
1204 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_fw_system_stats_read()
1205 u8 cmd_ver = iwl_fw_lookup_cmd_ver(mvm->fw, in iwl_dbgfs_fw_system_stats_read()
1215 return -ENOMEM; in iwl_dbgfs_fw_system_stats_read()
1221 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_fw_system_stats_read()
1226 mutex_lock(&mvm->mutex); in iwl_dbgfs_fw_system_stats_read()
1235 if (vif->type == NL80211_IFTYPE_STATION) in iwl_dbgfs_fw_system_stats_read()
1240 pos += scnprintf(pos, endpos - pos, "vif is NULL\n"); in iwl_dbgfs_fw_system_stats_read()
1246 pos += scnprintf(pos, endpos - pos, "mvmvif is NULL\n"); in iwl_dbgfs_fw_system_stats_read()
1251 struct iwl_mvm_vif_link_info *link_info = mvmvif->link[i]; in iwl_dbgfs_fw_system_stats_read()
1253 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_fw_system_stats_read()
1255 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_fw_system_stats_read()
1257 link_info->beacon_stats.num_beacons); in iwl_dbgfs_fw_system_stats_read()
1258 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_fw_system_stats_read()
1260 link_info->beacon_stats.accu_num_beacons); in iwl_dbgfs_fw_system_stats_read()
1261 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_fw_system_stats_read()
1263 link_info->beacon_stats.avg_signal); in iwl_dbgfs_fw_system_stats_read()
1266 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_fw_system_stats_read()
1268 mvm->radio_stats.rx_time); in iwl_dbgfs_fw_system_stats_read()
1269 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_fw_system_stats_read()
1271 mvm->radio_stats.tx_time); in iwl_dbgfs_fw_system_stats_read()
1272 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_fw_system_stats_read()
1274 mvm->accu_radio_stats.rx_time); in iwl_dbgfs_fw_system_stats_read()
1275 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_fw_system_stats_read()
1277 mvm->accu_radio_stats.tx_time); in iwl_dbgfs_fw_system_stats_read()
1280 mutex_unlock(&mvm->mutex); in iwl_dbgfs_fw_system_stats_read()
1283 ret = simple_read_from_buffer(user_buf, count, ppos, buff, pos - buff); in iwl_dbgfs_fw_system_stats_read()
1301 return -ENOMEM; in iwl_dbgfs_frame_stats_read()
1303 spin_lock_bh(&mvm->drv_stats_lock); in iwl_dbgfs_frame_stats_read()
1308 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_frame_stats_read()
1310 stats->legacy_frames, in iwl_dbgfs_frame_stats_read()
1311 stats->ht_frames, in iwl_dbgfs_frame_stats_read()
1312 stats->vht_frames); in iwl_dbgfs_frame_stats_read()
1313 pos += scnprintf(pos, endpos - pos, "20/40/80\t:\t%d/%d/%d\n", in iwl_dbgfs_frame_stats_read()
1314 stats->bw_20_frames, in iwl_dbgfs_frame_stats_read()
1315 stats->bw_40_frames, in iwl_dbgfs_frame_stats_read()
1316 stats->bw_80_frames); in iwl_dbgfs_frame_stats_read()
1317 pos += scnprintf(pos, endpos - pos, "NGI/SGI\t\t:\t%d/%d\n", in iwl_dbgfs_frame_stats_read()
1318 stats->ngi_frames, in iwl_dbgfs_frame_stats_read()
1319 stats->sgi_frames); in iwl_dbgfs_frame_stats_read()
1320 pos += scnprintf(pos, endpos - pos, "SISO/MIMO2\t:\t%d/%d\n", in iwl_dbgfs_frame_stats_read()
1321 stats->siso_frames, in iwl_dbgfs_frame_stats_read()
1322 stats->mimo2_frames); in iwl_dbgfs_frame_stats_read()
1323 pos += scnprintf(pos, endpos - pos, "FAIL/SCSS\t:\t%d/%d\n", in iwl_dbgfs_frame_stats_read()
1324 stats->fail_frames, in iwl_dbgfs_frame_stats_read()
1325 stats->success_frames); in iwl_dbgfs_frame_stats_read()
1326 pos += scnprintf(pos, endpos - pos, "MPDUs agg\t:\t%d\n", in iwl_dbgfs_frame_stats_read()
1327 stats->agg_frames); in iwl_dbgfs_frame_stats_read()
1328 pos += scnprintf(pos, endpos - pos, "A-MPDUs\t\t:\t%d\n", in iwl_dbgfs_frame_stats_read()
1329 stats->ampdu_count); in iwl_dbgfs_frame_stats_read()
1330 pos += scnprintf(pos, endpos - pos, "Avg MPDUs/A-MPDU:\t%d\n", in iwl_dbgfs_frame_stats_read()
1331 stats->ampdu_count > 0 ? in iwl_dbgfs_frame_stats_read()
1332 (stats->agg_frames / stats->ampdu_count) : 0); in iwl_dbgfs_frame_stats_read()
1334 pos += scnprintf(pos, endpos - pos, "Last Rates\n"); in iwl_dbgfs_frame_stats_read()
1336 idx = stats->last_frame_idx - 1; in iwl_dbgfs_frame_stats_read()
1337 for (i = 0; i < ARRAY_SIZE(stats->last_rates); i++) { in iwl_dbgfs_frame_stats_read()
1338 idx = (idx + 1) % ARRAY_SIZE(stats->last_rates); in iwl_dbgfs_frame_stats_read()
1339 if (stats->last_rates[idx] == 0) in iwl_dbgfs_frame_stats_read()
1341 pos += scnprintf(pos, endpos - pos, "Rate[%d]: ", in iwl_dbgfs_frame_stats_read()
1342 (int)(ARRAY_SIZE(stats->last_rates) - i)); in iwl_dbgfs_frame_stats_read()
1343 pos += rs_pretty_print_rate_v1(pos, endpos - pos, in iwl_dbgfs_frame_stats_read()
1344 stats->last_rates[idx]); in iwl_dbgfs_frame_stats_read()
1345 if (pos < endpos - 1) in iwl_dbgfs_frame_stats_read()
1348 spin_unlock_bh(&mvm->drv_stats_lock); in iwl_dbgfs_frame_stats_read()
1350 ret = simple_read_from_buffer(user_buf, count, ppos, buff, pos - buff); in iwl_dbgfs_frame_stats_read()
1360 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_drv_rx_stats_read()
1363 &mvm->drv_rx_stats); in iwl_dbgfs_drv_rx_stats_read()
1372 return -EIO; in iwl_dbgfs_fw_restart_write()
1374 mutex_lock(&mvm->mutex); in iwl_dbgfs_fw_restart_write()
1377 if (mvm->fw_restart >= 0) in iwl_dbgfs_fw_restart_write()
1378 mvm->fw_restart++; in iwl_dbgfs_fw_restart_write()
1381 set_bit(IWL_MVM_STATUS_SUPPRESS_ERROR_LOG_ONCE, &mvm->status); in iwl_dbgfs_fw_restart_write()
1382 set_bit(STATUS_SUPPRESS_CMD_ERROR_ONCE, &mvm->trans->status); in iwl_dbgfs_fw_restart_write()
1385 /* take the return value to make compiler happy - it will fail anyway */ in iwl_dbgfs_fw_restart_write()
1390 mutex_unlock(&mvm->mutex); in iwl_dbgfs_fw_restart_write()
1399 return -EIO; in iwl_dbgfs_fw_nmi_write()
1402 set_bit(IWL_MVM_STATUS_SUPPRESS_ERROR_LOG_ONCE, &mvm->status); in iwl_dbgfs_fw_nmi_write()
1404 iwl_force_nmi(mvm->trans); in iwl_dbgfs_fw_nmi_write()
1414 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_scan_ant_rxchain_read()
1420 pos += scnprintf(buf + pos, bufsz - pos, "Antennas for scan: "); in iwl_dbgfs_scan_ant_rxchain_read()
1421 if (mvm->scan_rx_ant & ANT_A) in iwl_dbgfs_scan_ant_rxchain_read()
1422 pos += scnprintf(buf + pos, bufsz - pos, "A"); in iwl_dbgfs_scan_ant_rxchain_read()
1423 if (mvm->scan_rx_ant & ANT_B) in iwl_dbgfs_scan_ant_rxchain_read()
1424 pos += scnprintf(buf + pos, bufsz - pos, "B"); in iwl_dbgfs_scan_ant_rxchain_read()
1425 pos += scnprintf(buf + pos, bufsz - pos, " (%x)\n", mvm->scan_rx_ant); in iwl_dbgfs_scan_ant_rxchain_read()
1437 return -EIO; in iwl_dbgfs_scan_ant_rxchain_write()
1440 return -EINVAL; in iwl_dbgfs_scan_ant_rxchain_write()
1442 return -EINVAL; in iwl_dbgfs_scan_ant_rxchain_write()
1444 return -EINVAL; in iwl_dbgfs_scan_ant_rxchain_write()
1446 if (mvm->scan_rx_ant != scan_rx_ant) { in iwl_dbgfs_scan_ant_rxchain_write()
1447 mvm->scan_rx_ant = scan_rx_ant; in iwl_dbgfs_scan_ant_rxchain_write()
1448 if (fw_has_capa(&mvm->fw->ucode_capa, in iwl_dbgfs_scan_ant_rxchain_write()
1480 * queues 3 - 14). in iwl_dbgfs_indirection_tbl_write()
1492 mutex_lock(&mvm->mutex); in iwl_dbgfs_indirection_tbl_write()
1498 mutex_unlock(&mvm->mutex); in iwl_dbgfs_indirection_tbl_write()
1517 int ret = -EINVAL; in iwl_dbgfs_inject_packet_write()
1520 return -EIO; in iwl_dbgfs_inject_packet_write()
1523 if (!mvm->trans->trans_cfg->mq_rx_supported) in iwl_dbgfs_inject_packet_write()
1524 return -EOPNOTSUPP; in iwl_dbgfs_inject_packet_write()
1528 return -ENOMEM; in iwl_dbgfs_inject_packet_write()
1566 return -EINVAL; in _iwl_dbgfs_inject_beacon_ie()
1569 return -EIO; in _iwl_dbgfs_inject_beacon_ie()
1572 !fw_has_api(&mvm->fw->ucode_capa, in _iwl_dbgfs_inject_beacon_ie()
1574 return -EINVAL; in _iwl_dbgfs_inject_beacon_ie()
1576 mutex_lock(&mvm->mutex); in _iwl_dbgfs_inject_beacon_ie()
1583 if (vif->type == NL80211_IFTYPE_AP) in _iwl_dbgfs_inject_beacon_ie()
1590 mvm->hw->extra_beacon_tailroom = len; in _iwl_dbgfs_inject_beacon_ie()
1592 beacon = ieee80211_beacon_get_template(mvm->hw, vif, NULL, 0); in _iwl_dbgfs_inject_beacon_ie()
1601 mvm->beacon_inject_active = true; in _iwl_dbgfs_inject_beacon_ie()
1609 cpu_to_le16(iwl_mvm_mac_ctxt_get_beacon_flags(mvm->fw, in _iwl_dbgfs_inject_beacon_ie()
1611 beacon_cmd.byte_cnt = cpu_to_le16((u16)beacon->len); in _iwl_dbgfs_inject_beacon_ie()
1612 if (iwl_fw_lookup_cmd_ver(mvm->fw, BEACON_TEMPLATE_CMD, 0) > 12) in _iwl_dbgfs_inject_beacon_ie()
1614 cpu_to_le32(mvmvif->link[link_id]->fw_link_id); in _iwl_dbgfs_inject_beacon_ie()
1616 beacon_cmd.link_id = cpu_to_le32((u32)mvmvif->id); in _iwl_dbgfs_inject_beacon_ie()
1620 beacon->data, beacon->len); in _iwl_dbgfs_inject_beacon_ie()
1625 mutex_unlock(&mvm->mutex); in _iwl_dbgfs_inject_beacon_ie()
1632 mutex_unlock(&mvm->mutex); in _iwl_dbgfs_inject_beacon_ie()
1633 return -EINVAL; in _iwl_dbgfs_inject_beacon_ie()
1642 mvm->hw->extra_beacon_tailroom = 0; in iwl_dbgfs_inject_beacon_ie_write()
1653 mvm->hw->extra_beacon_tailroom = 0; in iwl_dbgfs_inject_beacon_ie_restore_write()
1654 mvm->beacon_inject_active = false; in iwl_dbgfs_inject_beacon_ie_restore_write()
1662 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_fw_dbg_conf_read()
1668 mutex_lock(&mvm->mutex); in iwl_dbgfs_fw_dbg_conf_read()
1669 conf = mvm->fwrt.dump.conf; in iwl_dbgfs_fw_dbg_conf_read()
1670 mutex_unlock(&mvm->mutex); in iwl_dbgfs_fw_dbg_conf_read()
1672 pos += scnprintf(buf + pos, bufsz - pos, "%d\n", conf); in iwl_dbgfs_fw_dbg_conf_read()
1685 return -EIO; in iwl_dbgfs_fw_dbg_conf_write()
1692 return -EINVAL; in iwl_dbgfs_fw_dbg_conf_write()
1694 mutex_lock(&mvm->mutex); in iwl_dbgfs_fw_dbg_conf_write()
1695 ret = iwl_fw_start_dbg_conf(&mvm->fwrt, conf_id); in iwl_dbgfs_fw_dbg_conf_write()
1696 mutex_unlock(&mvm->mutex); in iwl_dbgfs_fw_dbg_conf_write()
1708 iwl_dbg_tlv_time_point(&mvm->fwrt, IWL_FW_INI_TIME_POINT_USER_TRIGGER, in iwl_dbgfs_fw_dbg_collect_write()
1711 iwl_fw_dbg_collect(&mvm->fwrt, FW_DBG_TRIGGER_USER, buf, in iwl_dbgfs_fw_dbg_collect_write()
1712 (count - 1), NULL); in iwl_dbgfs_fw_dbg_collect_write()
1721 if (mvm->trans->trans_cfg->device_family < IWL_DEVICE_FAMILY_9000) in iwl_dbgfs_fw_dbg_clear_write()
1722 return -EOPNOTSUPP; in iwl_dbgfs_fw_dbg_clear_write()
1724 mutex_lock(&mvm->mutex); in iwl_dbgfs_fw_dbg_clear_write()
1725 iwl_fw_dbg_clear_monitor_buf(&mvm->fwrt); in iwl_dbgfs_fw_dbg_clear_write()
1726 mutex_unlock(&mvm->mutex); in iwl_dbgfs_fw_dbg_clear_write()
1738 return -EINVAL; in iwl_dbgfs_dbg_time_point_write()
1742 return -EINVAL; in iwl_dbgfs_dbg_time_point_write()
1744 iwl_dbg_tlv_time_point(&mvm->fwrt, timepoint, NULL); in iwl_dbgfs_dbg_time_point_write()
1770 struct ieee80211_link_sta *link_sta = file->private_data; in _iwl_dbgfs_link_sta_wrap_write()
1771 struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(link_sta->sta); in _iwl_dbgfs_link_sta_wrap_write()
1772 struct iwl_mvm *mvm = iwl_mvm_vif_from_mac80211(mvmsta->vif)->mvm; in _iwl_dbgfs_link_sta_wrap_write()
1776 mutex_lock(&mvm->mutex); in _iwl_dbgfs_link_sta_wrap_write()
1778 mvm_link_sta = rcu_dereference_protected(mvmsta->link[link_sta->link_id], in _iwl_dbgfs_link_sta_wrap_write()
1779 lockdep_is_held(&mvm->mutex)); in _iwl_dbgfs_link_sta_wrap_write()
1781 mutex_unlock(&mvm->mutex); in _iwl_dbgfs_link_sta_wrap_write()
1782 return -ENODEV; in _iwl_dbgfs_link_sta_wrap_write()
1787 mutex_unlock(&mvm->mutex); in _iwl_dbgfs_link_sta_wrap_write()
1802 struct ieee80211_link_sta *link_sta = file->private_data; in _iwl_dbgfs_link_sta_wrap_read()
1803 struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(link_sta->sta); in _iwl_dbgfs_link_sta_wrap_read()
1804 struct iwl_mvm *mvm = iwl_mvm_vif_from_mac80211(mvmsta->vif)->mvm; in _iwl_dbgfs_link_sta_wrap_read()
1808 mutex_lock(&mvm->mutex); in _iwl_dbgfs_link_sta_wrap_read()
1810 mvm_link_sta = rcu_dereference_protected(mvmsta->link[link_sta->link_id], in _iwl_dbgfs_link_sta_wrap_read()
1811 lockdep_is_held(&mvm->mutex)); in _iwl_dbgfs_link_sta_wrap_read()
1813 mutex_unlock(&mvm->mutex); in _iwl_dbgfs_link_sta_wrap_read()
1814 return -ENODEV; in _iwl_dbgfs_link_sta_wrap_read()
1819 mutex_unlock(&mvm->mutex); in _iwl_dbgfs_link_sta_wrap_read()
1830 size_t buf_size = min(count, sizeof(buf) - 1); \
1833 return -EFAULT; \
1887 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_prph_reg_read()
1892 if (!mvm->dbgfs_prph_reg_addr) in iwl_dbgfs_prph_reg_read()
1893 return -EINVAL; in iwl_dbgfs_prph_reg_read()
1895 pos += scnprintf(buf + pos, bufsz - pos, "Reg 0x%x: (0x%x)\n", in iwl_dbgfs_prph_reg_read()
1896 mvm->dbgfs_prph_reg_addr, in iwl_dbgfs_prph_reg_read()
1897 iwl_read_prph(mvm->trans, mvm->dbgfs_prph_reg_addr)); in iwl_dbgfs_prph_reg_read()
1909 args = sscanf(buf, "%i %i", &mvm->dbgfs_prph_reg_addr, &value); in iwl_dbgfs_prph_reg_write()
1910 /* if we only want to set the reg address - nothing more to do */ in iwl_dbgfs_prph_reg_write()
1916 return -EINVAL; in iwl_dbgfs_prph_reg_write()
1918 iwl_write_prph(mvm->trans, mvm->dbgfs_prph_reg_addr, value); in iwl_dbgfs_prph_reg_write()
1931 return -EIO; in iwl_dbgfs_send_echo_cmd_write()
1933 mutex_lock(&mvm->mutex); in iwl_dbgfs_send_echo_cmd_write()
1935 mutex_unlock(&mvm->mutex); in iwl_dbgfs_send_echo_cmd_write()
1951 apply->mvm->cur_aid = cpu_to_le16(apply->aid); in iwl_mvm_sniffer_apply()
1952 memcpy(apply->mvm->cur_bssid, apply->bssid, in iwl_mvm_sniffer_apply()
1953 sizeof(apply->mvm->cur_bssid)); in iwl_mvm_sniffer_apply()
1974 return -EIO; in iwl_dbgfs_he_sniffer_params_write()
1981 return -EINVAL; in iwl_dbgfs_he_sniffer_params_write()
1988 mutex_lock(&mvm->mutex); in iwl_dbgfs_he_sniffer_params_write()
1994 * still have mvm->cur_aid pointing to the old AID, and that in iwl_dbgfs_he_sniffer_params_write()
1997 * get mvm->cur_aid correctly set to the new AID. in iwl_dbgfs_he_sniffer_params_write()
1999 iwl_init_notification_wait(&mvm->notif_wait, &wait, in iwl_dbgfs_he_sniffer_params_write()
2009 iwl_remove_notification(&mvm->notif_wait, &wait); in iwl_dbgfs_he_sniffer_params_write()
2011 mutex_unlock(&mvm->mutex); in iwl_dbgfs_he_sniffer_params_write()
2020 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_he_sniffer_params_read()
2026 le16_to_cpu(mvm->cur_aid), mvm->cur_bssid[0], in iwl_dbgfs_he_sniffer_params_read()
2027 mvm->cur_bssid[1], mvm->cur_bssid[2], mvm->cur_bssid[3], in iwl_dbgfs_he_sniffer_params_read()
2028 mvm->cur_bssid[4], mvm->cur_bssid[5]); in iwl_dbgfs_he_sniffer_params_read()
2037 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_uapsd_noagg_bssids_read()
2043 mutex_lock(&mvm->mutex); in iwl_dbgfs_uapsd_noagg_bssids_read()
2046 pos += scnprintf(buf + pos, bufsz - pos, "%pM\n", in iwl_dbgfs_uapsd_noagg_bssids_read()
2047 mvm->uapsd_noagg_bssids[i].addr); in iwl_dbgfs_uapsd_noagg_bssids_read()
2049 mutex_unlock(&mvm->mutex); in iwl_dbgfs_uapsd_noagg_bssids_read()
2062 return -EIO; in iwl_dbgfs_ltr_config_write()
2072 return -EINVAL; in iwl_dbgfs_ltr_config_write()
2075 mutex_lock(&mvm->mutex); in iwl_dbgfs_ltr_config_write()
2078 mutex_unlock(&mvm->mutex); in iwl_dbgfs_ltr_config_write()
2093 return -EINVAL; in iwl_dbgfs_rfi_freq_table_write()
2095 /* value zero triggers re-sending the default table to the device */ in iwl_dbgfs_rfi_freq_table_write()
2097 mutex_lock(&mvm->mutex); in iwl_dbgfs_rfi_freq_table_write()
2099 mutex_unlock(&mvm->mutex); in iwl_dbgfs_rfi_freq_table_write()
2101 ret = -EOPNOTSUPP; /* in the future a new table will be added */ in iwl_dbgfs_rfi_freq_table_write()
2109 * the table; So, need 5 chars for the "freq: " part and each tuple afterwards
2119 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_rfi_freq_table_read()
2129 status = le32_to_cpu(resp->status); in iwl_dbgfs_rfi_freq_table_read()
2135 for (i = 0; i < ARRAY_SIZE(resp->table); i++) { in iwl_dbgfs_rfi_freq_table_read()
2136 pos += scnprintf(buf + pos, IWL_RFI_BUF_SIZE - pos, "%d: ", in iwl_dbgfs_rfi_freq_table_read()
2137 resp->table[i].freq); in iwl_dbgfs_rfi_freq_table_read()
2139 for (j = 0; j < ARRAY_SIZE(resp->table[i].channels); j++) in iwl_dbgfs_rfi_freq_table_read()
2140 pos += scnprintf(buf + pos, IWL_RFI_BUF_SIZE - pos, in iwl_dbgfs_rfi_freq_table_read()
2142 resp->table[i].channels[j], in iwl_dbgfs_rfi_freq_table_read()
2143 resp->table[i].bands[j]); in iwl_dbgfs_rfi_freq_table_read()
2144 pos += scnprintf(buf + pos, IWL_RFI_BUF_SIZE - pos, "\n"); in iwl_dbgfs_rfi_freq_table_read()
2208 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_mem_read()
2220 return -EIO; in iwl_dbgfs_mem_read()
2227 cmd.addr = cpu_to_le32(*ppos - delta); in iwl_dbgfs_mem_read()
2231 mutex_lock(&mvm->mutex); in iwl_dbgfs_mem_read()
2233 mutex_unlock(&mvm->mutex); in iwl_dbgfs_mem_read()
2239 ret = -EIO; in iwl_dbgfs_mem_read()
2243 rsp = (void *)hcmd.resp_pkt->data; in iwl_dbgfs_mem_read()
2244 if (le32_to_cpu(rsp->status) != DEBUG_MEM_STATUS_SUCCESS) { in iwl_dbgfs_mem_read()
2245 ret = -ENXIO; in iwl_dbgfs_mem_read()
2249 len = min((size_t)le32_to_cpu(rsp->len) << 2, in iwl_dbgfs_mem_read()
2250 iwl_rx_packet_payload_len(hcmd.resp_pkt) - sizeof(*rsp)); in iwl_dbgfs_mem_read()
2251 len = min(len - delta, count); in iwl_dbgfs_mem_read()
2253 ret = -EFAULT; in iwl_dbgfs_mem_read()
2257 ret = len - copy_to_user(user_buf, (u8 *)rsp->data + delta, len); in iwl_dbgfs_mem_read()
2269 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_mem_write()
2279 return -EIO; in iwl_dbgfs_mem_write()
2285 len = min(count, (size_t)(4 - (*ppos & 0x3))); in iwl_dbgfs_mem_write()
2296 return -ENOMEM; in iwl_dbgfs_mem_write()
2298 cmd->op = cpu_to_le32(op); in iwl_dbgfs_mem_write()
2299 cmd->len = cpu_to_le32(len); in iwl_dbgfs_mem_write()
2300 cmd->addr = cpu_to_le32(*ppos); in iwl_dbgfs_mem_write()
2301 if (copy_from_user((void *)cmd->data, user_buf, data_size)) { in iwl_dbgfs_mem_write()
2303 return -EFAULT; in iwl_dbgfs_mem_write()
2310 mutex_lock(&mvm->mutex); in iwl_dbgfs_mem_write()
2312 mutex_unlock(&mvm->mutex); in iwl_dbgfs_mem_write()
2320 ret = -EIO; in iwl_dbgfs_mem_write()
2324 rsp = (void *)hcmd.resp_pkt->data; in iwl_dbgfs_mem_write()
2325 if (rsp->status != DEBUG_MEM_STATUS_SUCCESS) { in iwl_dbgfs_mem_write()
2326 ret = -ENXIO; in iwl_dbgfs_mem_write()
2363 spin_lock_init(&mvm->drv_stats_lock); in iwl_mvm_dbgfs_register()
2365 MVM_DEBUGFS_ADD_FILE(tx_flush, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2366 MVM_DEBUGFS_ADD_FILE(sta_drain, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2367 MVM_DEBUGFS_ADD_FILE(sram, mvm->debugfs_dir, 0600); in iwl_mvm_dbgfs_register()
2368 MVM_DEBUGFS_ADD_FILE(set_nic_temperature, mvm->debugfs_dir, 0600); in iwl_mvm_dbgfs_register()
2369 MVM_DEBUGFS_ADD_FILE(nic_temp, mvm->debugfs_dir, 0400); in iwl_mvm_dbgfs_register()
2370 MVM_DEBUGFS_ADD_FILE(ctdp_budget, mvm->debugfs_dir, 0400); in iwl_mvm_dbgfs_register()
2371 MVM_DEBUGFS_ADD_FILE(stop_ctdp, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2372 MVM_DEBUGFS_ADD_FILE(start_ctdp, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2373 MVM_DEBUGFS_ADD_FILE(force_ctkill, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2374 MVM_DEBUGFS_ADD_FILE(stations, mvm->debugfs_dir, 0400); in iwl_mvm_dbgfs_register()
2375 MVM_DEBUGFS_ADD_FILE(bt_notif, mvm->debugfs_dir, 0400); in iwl_mvm_dbgfs_register()
2376 MVM_DEBUGFS_ADD_FILE(bt_cmd, mvm->debugfs_dir, 0400); in iwl_mvm_dbgfs_register()
2377 MVM_DEBUGFS_ADD_FILE(disable_power_off, mvm->debugfs_dir, 0600); in iwl_mvm_dbgfs_register()
2378 MVM_DEBUGFS_ADD_FILE(fw_ver, mvm->debugfs_dir, 0400); in iwl_mvm_dbgfs_register()
2379 MVM_DEBUGFS_ADD_FILE(fw_rx_stats, mvm->debugfs_dir, 0400); in iwl_mvm_dbgfs_register()
2380 MVM_DEBUGFS_ADD_FILE(drv_rx_stats, mvm->debugfs_dir, 0400); in iwl_mvm_dbgfs_register()
2381 MVM_DEBUGFS_ADD_FILE(fw_system_stats, mvm->debugfs_dir, 0400); in iwl_mvm_dbgfs_register()
2382 MVM_DEBUGFS_ADD_FILE(fw_restart, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2383 MVM_DEBUGFS_ADD_FILE(fw_nmi, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2384 MVM_DEBUGFS_ADD_FILE(bt_tx_prio, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2385 MVM_DEBUGFS_ADD_FILE(bt_force_ant, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2386 MVM_DEBUGFS_ADD_FILE(scan_ant_rxchain, mvm->debugfs_dir, 0600); in iwl_mvm_dbgfs_register()
2387 MVM_DEBUGFS_ADD_FILE(prph_reg, mvm->debugfs_dir, 0600); in iwl_mvm_dbgfs_register()
2388 MVM_DEBUGFS_ADD_FILE(fw_dbg_conf, mvm->debugfs_dir, 0600); in iwl_mvm_dbgfs_register()
2389 MVM_DEBUGFS_ADD_FILE(fw_dbg_collect, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2390 MVM_DEBUGFS_ADD_FILE(fw_dbg_clear, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2391 MVM_DEBUGFS_ADD_FILE(dbg_time_point, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2392 MVM_DEBUGFS_ADD_FILE(send_echo_cmd, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2393 MVM_DEBUGFS_ADD_FILE(indirection_tbl, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2394 MVM_DEBUGFS_ADD_FILE(inject_packet, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2395 MVM_DEBUGFS_ADD_FILE(inject_beacon_ie, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2396 MVM_DEBUGFS_ADD_FILE(inject_beacon_ie_restore, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2397 MVM_DEBUGFS_ADD_FILE(rfi_freq_table, mvm->debugfs_dir, 0600); in iwl_mvm_dbgfs_register()
2399 if (mvm->fw->phy_integration_ver) in iwl_mvm_dbgfs_register()
2400 MVM_DEBUGFS_ADD_FILE(phy_integration_ver, mvm->debugfs_dir, 0400); in iwl_mvm_dbgfs_register()
2401 MVM_DEBUGFS_ADD_FILE(tas_get_status, mvm->debugfs_dir, 0400); in iwl_mvm_dbgfs_register()
2403 MVM_DEBUGFS_ADD_FILE(sar_geo_profile, mvm->debugfs_dir, 0400); in iwl_mvm_dbgfs_register()
2404 MVM_DEBUGFS_ADD_FILE(wifi_6e_enable, mvm->debugfs_dir, 0400); in iwl_mvm_dbgfs_register()
2406 MVM_DEBUGFS_ADD_FILE(he_sniffer_params, mvm->debugfs_dir, 0600); in iwl_mvm_dbgfs_register()
2408 if (fw_has_capa(&mvm->fw->ucode_capa, IWL_UCODE_TLV_CAPA_SET_LTR_GEN2)) in iwl_mvm_dbgfs_register()
2409 MVM_DEBUGFS_ADD_FILE(ltr_config, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2412 mvm->debugfs_dir, &mvm->scan_iter_notif_enabled); in iwl_mvm_dbgfs_register()
2413 debugfs_create_bool("drop_bcn_ap_mode", 0600, mvm->debugfs_dir, in iwl_mvm_dbgfs_register()
2414 &mvm->drop_bcn_ap_mode); in iwl_mvm_dbgfs_register()
2416 MVM_DEBUGFS_ADD_FILE(uapsd_noagg_bssids, mvm->debugfs_dir, S_IRUSR); in iwl_mvm_dbgfs_register()
2419 MVM_DEBUGFS_ADD_FILE(d3_test, mvm->debugfs_dir, 0400); in iwl_mvm_dbgfs_register()
2420 debugfs_create_bool("d3_wake_sysassert", 0600, mvm->debugfs_dir, in iwl_mvm_dbgfs_register()
2421 &mvm->d3_wake_sysassert); in iwl_mvm_dbgfs_register()
2422 debugfs_create_u32("last_netdetect_scans", 0400, mvm->debugfs_dir, in iwl_mvm_dbgfs_register()
2423 &mvm->last_netdetect_scans); in iwl_mvm_dbgfs_register()
2426 debugfs_create_u8("ps_disabled", 0400, mvm->debugfs_dir, in iwl_mvm_dbgfs_register()
2427 &mvm->ps_disabled); in iwl_mvm_dbgfs_register()
2428 debugfs_create_blob("nvm_hw", 0400, mvm->debugfs_dir, in iwl_mvm_dbgfs_register()
2429 &mvm->nvm_hw_blob); in iwl_mvm_dbgfs_register()
2430 debugfs_create_blob("nvm_sw", 0400, mvm->debugfs_dir, in iwl_mvm_dbgfs_register()
2431 &mvm->nvm_sw_blob); in iwl_mvm_dbgfs_register()
2432 debugfs_create_blob("nvm_calib", 0400, mvm->debugfs_dir, in iwl_mvm_dbgfs_register()
2433 &mvm->nvm_calib_blob); in iwl_mvm_dbgfs_register()
2434 debugfs_create_blob("nvm_prod", 0400, mvm->debugfs_dir, in iwl_mvm_dbgfs_register()
2435 &mvm->nvm_prod_blob); in iwl_mvm_dbgfs_register()
2436 debugfs_create_blob("nvm_phy_sku", 0400, mvm->debugfs_dir, in iwl_mvm_dbgfs_register()
2437 &mvm->nvm_phy_sku_blob); in iwl_mvm_dbgfs_register()
2439 mvm->debugfs_dir, &mvm->nvm_reg_blob); in iwl_mvm_dbgfs_register()
2441 debugfs_create_file("mem", 0600, mvm->debugfs_dir, mvm, in iwl_mvm_dbgfs_register()
2448 if (!IS_ERR(mvm->debugfs_dir)) { in iwl_mvm_dbgfs_register()
2451 snprintf(buf, 100, "../../%pd2", mvm->debugfs_dir->d_parent); in iwl_mvm_dbgfs_register()
2452 debugfs_create_symlink("iwlwifi", mvm->hw->wiphy->debugfsdir, in iwl_mvm_dbgfs_register()