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, 2025 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 "iwl-utils.h"
20 #include "fw/error-dump.h"
21 #include "fw/api/phy-ctxt.h"
27 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_ctdp_budget_read()
32 return -EOPNOTSUPP; in iwl_dbgfs_ctdp_budget_read()
35 mvm->fwrt.cur_fw_img != IWL_UCODE_REGULAR) in iwl_dbgfs_ctdp_budget_read()
36 return -EIO; in iwl_dbgfs_ctdp_budget_read()
38 mutex_lock(&mvm->mutex); in iwl_dbgfs_ctdp_budget_read()
40 mutex_unlock(&mvm->mutex); in iwl_dbgfs_ctdp_budget_read()
66 return -EOPNOTSUPP; in iwl_dbgfs_stop_ctdp_write()
69 mvm->fwrt.cur_fw_img != IWL_UCODE_REGULAR) in iwl_dbgfs_stop_ctdp_write()
70 return -EIO; in iwl_dbgfs_stop_ctdp_write()
72 mutex_lock(&mvm->mutex); in iwl_dbgfs_stop_ctdp_write()
74 mutex_unlock(&mvm->mutex); in iwl_dbgfs_stop_ctdp_write()
96 return -EOPNOTSUPP; in iwl_dbgfs_start_ctdp_write()
99 mvm->fwrt.cur_fw_img != IWL_UCODE_REGULAR) in iwl_dbgfs_start_ctdp_write()
100 return -EIO; in iwl_dbgfs_start_ctdp_write()
102 mutex_lock(&mvm->mutex); in iwl_dbgfs_start_ctdp_write()
104 mutex_unlock(&mvm->mutex); in iwl_dbgfs_start_ctdp_write()
113 mvm->fwrt.cur_fw_img != IWL_UCODE_REGULAR) in iwl_dbgfs_force_ctkill_write()
114 return -EIO; in iwl_dbgfs_force_ctkill_write()
128 mvm->fwrt.cur_fw_img != IWL_UCODE_REGULAR) in iwl_dbgfs_tx_flush_write()
129 return -EIO; in iwl_dbgfs_tx_flush_write()
132 return -EINVAL; in iwl_dbgfs_tx_flush_write()
138 mutex_lock(&mvm->mutex); in iwl_dbgfs_tx_flush_write()
141 mutex_unlock(&mvm->mutex); in iwl_dbgfs_tx_flush_write()
148 mutex_lock(&mvm->mutex); in iwl_dbgfs_tx_flush_write()
150 mutex_unlock(&mvm->mutex); in iwl_dbgfs_tx_flush_write()
158 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_sram_read()
165 return -EINVAL; in iwl_dbgfs_sram_read()
168 img = &mvm->fw->img[mvm->fwrt.cur_fw_img]; in iwl_dbgfs_sram_read()
169 ofs = img->sec[IWL_UCODE_SECTION_DATA].offset; in iwl_dbgfs_sram_read()
170 len = img->sec[IWL_UCODE_SECTION_DATA].len; in iwl_dbgfs_sram_read()
172 if (mvm->dbgfs_sram_len) { in iwl_dbgfs_sram_read()
173 ofs = mvm->dbgfs_sram_offset; in iwl_dbgfs_sram_read()
174 len = mvm->dbgfs_sram_len; in iwl_dbgfs_sram_read()
179 return -ENOMEM; in iwl_dbgfs_sram_read()
181 iwl_trans_read_mem_bytes(mvm->trans, ofs, ptr, len); in iwl_dbgfs_sram_read()
198 return -EINVAL; in iwl_dbgfs_sram_write()
200 img = &mvm->fw->img[mvm->fwrt.cur_fw_img]; in iwl_dbgfs_sram_write()
201 img_offset = img->sec[IWL_UCODE_SECTION_DATA].offset; in iwl_dbgfs_sram_write()
202 img_len = img->sec[IWL_UCODE_SECTION_DATA].len; in iwl_dbgfs_sram_write()
206 return -EINVAL; in iwl_dbgfs_sram_write()
209 return -EINVAL; in iwl_dbgfs_sram_write()
211 mvm->dbgfs_sram_offset = offset; in iwl_dbgfs_sram_write()
212 mvm->dbgfs_sram_len = len; in iwl_dbgfs_sram_write()
214 mvm->dbgfs_sram_offset = 0; in iwl_dbgfs_sram_write()
215 mvm->dbgfs_sram_len = 0; in iwl_dbgfs_sram_write()
225 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_set_nic_temperature_read()
229 if (!mvm->temperature_test) in iwl_dbgfs_set_nic_temperature_read()
232 pos = scnprintf(buf, sizeof(buf), "%d\n", mvm->temperature); in iwl_dbgfs_set_nic_temperature_read()
240 * Enable: any value between IWL_MVM_DEBUG_SET_TEMPERATURE_MIN -
250 if (!iwl_mvm_firmware_running(mvm) && !mvm->temperature_test) in iwl_dbgfs_set_nic_temperature_write()
251 return -EIO; in iwl_dbgfs_set_nic_temperature_write()
254 return -EINVAL; in iwl_dbgfs_set_nic_temperature_write()
259 return -EINVAL; in iwl_dbgfs_set_nic_temperature_write()
261 mutex_lock(&mvm->mutex); in iwl_dbgfs_set_nic_temperature_write()
263 if (!mvm->temperature_test) in iwl_dbgfs_set_nic_temperature_write()
266 mvm->temperature_test = false; in iwl_dbgfs_set_nic_temperature_write()
271 mvm->temperature = 0; in iwl_dbgfs_set_nic_temperature_write()
273 mvm->temperature_test = true; in iwl_dbgfs_set_nic_temperature_write()
274 mvm->temperature = temperature; in iwl_dbgfs_set_nic_temperature_write()
277 mvm->temperature_test ? "En" : "Dis", in iwl_dbgfs_set_nic_temperature_write()
278 mvm->temperature); in iwl_dbgfs_set_nic_temperature_write()
283 mutex_unlock(&mvm->mutex); in iwl_dbgfs_set_nic_temperature_write()
292 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_nic_temp_read()
298 return -EIO; in iwl_dbgfs_nic_temp_read()
300 mutex_lock(&mvm->mutex); in iwl_dbgfs_nic_temp_read()
302 mutex_unlock(&mvm->mutex); in iwl_dbgfs_nic_temp_read()
305 return -EIO; in iwl_dbgfs_nic_temp_read()
317 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_sar_geo_profile_read()
324 return -EIO; in iwl_dbgfs_sar_geo_profile_read()
326 mutex_lock(&mvm->mutex); in iwl_dbgfs_sar_geo_profile_read()
329 mutex_unlock(&mvm->mutex); in iwl_dbgfs_sar_geo_profile_read()
337 pos += scnprintf(buf + pos, bufsz - pos, in iwl_dbgfs_sar_geo_profile_read()
339 pos += scnprintf(buf + pos, bufsz - pos, in iwl_dbgfs_sar_geo_profile_read()
341 mvm->fwrt.geo_profiles[tbl_idx - 1].bands[0].chains[0], in iwl_dbgfs_sar_geo_profile_read()
342 mvm->fwrt.geo_profiles[tbl_idx - 1].bands[0].chains[1], in iwl_dbgfs_sar_geo_profile_read()
343 mvm->fwrt.geo_profiles[tbl_idx - 1].bands[0].max); in iwl_dbgfs_sar_geo_profile_read()
344 pos += scnprintf(buf + pos, bufsz - pos, in iwl_dbgfs_sar_geo_profile_read()
346 mvm->fwrt.geo_profiles[tbl_idx - 1].bands[1].chains[0], in iwl_dbgfs_sar_geo_profile_read()
347 mvm->fwrt.geo_profiles[tbl_idx - 1].bands[1].chains[1], in iwl_dbgfs_sar_geo_profile_read()
348 mvm->fwrt.geo_profiles[tbl_idx - 1].bands[1].max); in iwl_dbgfs_sar_geo_profile_read()
350 mutex_unlock(&mvm->mutex); in iwl_dbgfs_sar_geo_profile_read()
359 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_wifi_6e_enable_read()
364 err = iwl_bios_get_dsm(&mvm->fwrt, DSM_FUNC_ENABLE_6E, &value); in iwl_dbgfs_wifi_6e_enable_read()
377 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_stations_read()
382 mutex_lock(&mvm->mutex); in iwl_dbgfs_stations_read()
384 for (i = 0; i < mvm->fw->ucode_capa.num_stations; i++) { in iwl_dbgfs_stations_read()
385 pos += scnprintf(buf + pos, bufsz - pos, "%.2d: ", i); in iwl_dbgfs_stations_read()
386 sta = rcu_dereference_protected(mvm->fw_id_to_mac_id[i], in iwl_dbgfs_stations_read()
387 lockdep_is_held(&mvm->mutex)); in iwl_dbgfs_stations_read()
389 pos += scnprintf(buf + pos, bufsz - pos, "N/A\n"); in iwl_dbgfs_stations_read()
391 pos += scnprintf(buf + pos, bufsz - pos, "%ld\n", in iwl_dbgfs_stations_read()
394 pos += scnprintf(buf + pos, bufsz - pos, "%pM\n", in iwl_dbgfs_stations_read()
395 sta->addr); in iwl_dbgfs_stations_read()
398 mutex_unlock(&mvm->mutex); in iwl_dbgfs_stations_read()
410 struct iwl_lq_sta_rs_fw *lq_sta = &mvm_link_sta->lq_sta.rs_fw; in iwl_dbgfs_rs_data_read()
418 return -ENOMEM; in iwl_dbgfs_rs_data_read()
420 desc += scnprintf(buff + desc, bufsz - desc, "sta_id %d\n", in iwl_dbgfs_rs_data_read()
421 lq_sta->pers.sta_id); in iwl_dbgfs_rs_data_read()
422 desc += scnprintf(buff + desc, bufsz - desc, in iwl_dbgfs_rs_data_read()
424 lq_sta->pers.dbg_fixed_rate); in iwl_dbgfs_rs_data_read()
425 desc += scnprintf(buff + desc, bufsz - desc, in iwl_dbgfs_rs_data_read()
426 "A-MPDU size limit %d\n", in iwl_dbgfs_rs_data_read()
427 lq_sta->pers.dbg_agg_frame_count_lim); in iwl_dbgfs_rs_data_read()
428 desc += scnprintf(buff + desc, bufsz - desc, in iwl_dbgfs_rs_data_read()
432 desc += scnprintf(buff + desc, bufsz - desc, in iwl_dbgfs_rs_data_read()
434 lq_sta->last_rate_n_flags); in iwl_dbgfs_rs_data_read()
436 desc += rs_pretty_print_rate(buff + desc, bufsz - desc, in iwl_dbgfs_rs_data_read()
437 lq_sta->last_rate_n_flags); in iwl_dbgfs_rs_data_read()
438 if (desc < bufsz - 1) in iwl_dbgfs_rs_data_read()
457 return -EINVAL; in iwl_dbgfs_amsdu_len_write()
459 /* only change from debug set <-> debug unset */ in iwl_dbgfs_amsdu_len_write()
460 if (amsdu_len && mvm_link_sta->orig_amsdu_len) in iwl_dbgfs_amsdu_len_write()
461 return -EBUSY; in iwl_dbgfs_amsdu_len_write()
464 mvm_link_sta->orig_amsdu_len = link_sta->agg.max_amsdu_len; in iwl_dbgfs_amsdu_len_write()
465 link_sta->agg.max_amsdu_len = amsdu_len; in iwl_dbgfs_amsdu_len_write()
466 for (i = 0; i < ARRAY_SIZE(link_sta->agg.max_tid_amsdu_len); i++) in iwl_dbgfs_amsdu_len_write()
467 link_sta->agg.max_tid_amsdu_len[i] = amsdu_len; in iwl_dbgfs_amsdu_len_write()
469 link_sta->agg.max_amsdu_len = mvm_link_sta->orig_amsdu_len; in iwl_dbgfs_amsdu_len_write()
470 mvm_link_sta->orig_amsdu_len = 0; in iwl_dbgfs_amsdu_len_write()
473 ieee80211_sta_recalc_aggregates(link_sta->sta); in iwl_dbgfs_amsdu_len_write()
489 link_sta->agg.max_amsdu_len); in iwl_dbgfs_amsdu_len_read()
490 pos += scnprintf(buf + pos, sizeof(buf) - pos, "stored %d\n", in iwl_dbgfs_amsdu_len_read()
491 mvm_link_sta->orig_amsdu_len); in iwl_dbgfs_amsdu_len_read()
500 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_disable_power_off_read()
505 pos += scnprintf(buf+pos, bufsz-pos, "disable_power_off_d0=%d\n", in iwl_dbgfs_disable_power_off_read()
506 mvm->disable_power_off); in iwl_dbgfs_disable_power_off_read()
507 pos += scnprintf(buf+pos, bufsz-pos, "disable_power_off_d3=%d\n", in iwl_dbgfs_disable_power_off_read()
508 mvm->disable_power_off_d3); in iwl_dbgfs_disable_power_off_read()
519 return -EIO; in iwl_dbgfs_disable_power_off_write()
523 return -EINVAL; in iwl_dbgfs_disable_power_off_write()
524 mvm->disable_power_off = val; in iwl_dbgfs_disable_power_off_write()
527 return -EINVAL; in iwl_dbgfs_disable_power_off_write()
528 mvm->disable_power_off_d3 = val; in iwl_dbgfs_disable_power_off_write()
530 return -EINVAL; in iwl_dbgfs_disable_power_off_write()
533 mutex_lock(&mvm->mutex); in iwl_dbgfs_disable_power_off_write()
535 mutex_unlock(&mvm->mutex); in iwl_dbgfs_disable_power_off_write()
544 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_tas_get_status_read()
552 "Due To SAR Limit Less Than 6 dBm", in iwl_dbgfs_tas_get_status_read()
581 return -ENODEV; in iwl_dbgfs_tas_get_status_read()
583 if (iwl_fw_lookup_notif_ver(mvm->fw, DEBUG_GROUP, GET_TAS_STATUS, in iwl_dbgfs_tas_get_status_read()
585 return -EOPNOTSUPP; in iwl_dbgfs_tas_get_status_read()
587 mutex_lock(&mvm->mutex); in iwl_dbgfs_tas_get_status_read()
589 mutex_unlock(&mvm->mutex); in iwl_dbgfs_tas_get_status_read()
595 return -ENOMEM; in iwl_dbgfs_tas_get_status_read()
599 rsp = (void *)hcmd.resp_pkt->data; in iwl_dbgfs_tas_get_status_read()
601 pos += scnprintf(pos, endpos - pos, "TAS Conclusion:\n"); in iwl_dbgfs_tas_get_status_read()
602 for (i = 0; i < rsp->in_dual_radio + 1; i++) { in iwl_dbgfs_tas_get_status_read()
603 if (rsp->tas_status_mac[i].dynamic_status & in iwl_dbgfs_tas_get_status_read()
605 pos += scnprintf(pos, endpos - pos, "\tON for "); in iwl_dbgfs_tas_get_status_read()
606 switch (rsp->tas_status_mac[i].band) { in iwl_dbgfs_tas_get_status_read()
608 pos += scnprintf(pos, endpos - pos, "HB\n"); in iwl_dbgfs_tas_get_status_read()
611 pos += scnprintf(pos, endpos - pos, "LB\n"); in iwl_dbgfs_tas_get_status_read()
614 pos += scnprintf(pos, endpos - pos, "UHB\n"); in iwl_dbgfs_tas_get_status_read()
617 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_tas_get_status_read()
619 rsp->tas_status_mac[i].band); in iwl_dbgfs_tas_get_status_read()
626 pos += scnprintf(pos, endpos - pos, "\tOFF\n"); in iwl_dbgfs_tas_get_status_read()
628 pos += scnprintf(pos, endpos - pos, "TAS Report\n"); in iwl_dbgfs_tas_get_status_read()
629 pos += scnprintf(pos, endpos - pos, "TAS FW version: %d\n", in iwl_dbgfs_tas_get_status_read()
630 rsp->tas_fw_version); in iwl_dbgfs_tas_get_status_read()
631 pos += scnprintf(pos, endpos - pos, "Is UHB enabled for USA?: %s\n", in iwl_dbgfs_tas_get_status_read()
632 rsp->is_uhb_for_usa_enable ? "True" : "False"); in iwl_dbgfs_tas_get_status_read()
634 if (fw_has_capa(&mvm->fw->ucode_capa, in iwl_dbgfs_tas_get_status_read()
636 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_tas_get_status_read()
638 rsp->uhb_allowed_flags & in iwl_dbgfs_tas_get_status_read()
641 pos += scnprintf(pos, endpos - pos, "Current MCC: 0x%x\n", in iwl_dbgfs_tas_get_status_read()
642 le16_to_cpu(rsp->curr_mcc)); in iwl_dbgfs_tas_get_status_read()
644 pos += scnprintf(pos, endpos - pos, "Block list entries:"); in iwl_dbgfs_tas_get_status_read()
646 pos += scnprintf(pos, endpos - pos, " 0x%x", in iwl_dbgfs_tas_get_status_read()
647 le16_to_cpu(rsp->block_list[i])); in iwl_dbgfs_tas_get_status_read()
649 pos += scnprintf(pos, endpos - pos, "\nOEM name: %s\n", in iwl_dbgfs_tas_get_status_read()
651 pos += scnprintf(pos, endpos - pos, "\tVendor In Approved List: %s\n", in iwl_dbgfs_tas_get_status_read()
653 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_tas_get_status_read()
655 rsp->in_dual_radio ? "TRUE" : "FALSE"); in iwl_dbgfs_tas_get_status_read()
657 for (i = 0; i < rsp->in_dual_radio + 1; i++) { in iwl_dbgfs_tas_get_status_read()
658 if (rsp->tas_status_mac[i].static_status == 0) { in iwl_dbgfs_tas_get_status_read()
659 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_tas_get_status_read()
661 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_tas_get_status_read()
667 pos += scnprintf(pos, endpos - pos, "TAS status for "); in iwl_dbgfs_tas_get_status_read()
668 switch (rsp->tas_status_mac[i].band) { in iwl_dbgfs_tas_get_status_read()
670 pos += scnprintf(pos, endpos - pos, "High band\n"); in iwl_dbgfs_tas_get_status_read()
673 pos += scnprintf(pos, endpos - pos, "Low band\n"); in iwl_dbgfs_tas_get_status_read()
676 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_tas_get_status_read()
680 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_tas_get_status_read()
682 rsp->tas_status_mac[i].band); in iwl_dbgfs_tas_get_status_read()
685 pos += scnprintf(pos, endpos - pos, "Static status: %sabled\n", in iwl_dbgfs_tas_get_status_read()
686 rsp->tas_status_mac[i].static_status ? in iwl_dbgfs_tas_get_status_read()
688 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_tas_get_status_read()
690 if (rsp->tas_status_mac[i].static_dis_reason < TAS_DISABLED_REASON_MAX) in iwl_dbgfs_tas_get_status_read()
691 pos += scnprintf(pos, endpos - pos, "%s (%d)\n", in iwl_dbgfs_tas_get_status_read()
692 tas_dis_reason[rsp->tas_status_mac[i].static_dis_reason], in iwl_dbgfs_tas_get_status_read()
693 rsp->tas_status_mac[i].static_dis_reason); in iwl_dbgfs_tas_get_status_read()
695 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_tas_get_status_read()
697 rsp->tas_status_mac[i].static_dis_reason); in iwl_dbgfs_tas_get_status_read()
699 pos += scnprintf(pos, endpos - pos, "Dynamic status:\n"); in iwl_dbgfs_tas_get_status_read()
700 dyn_status = (rsp->tas_status_mac[i].dynamic_status); in iwl_dbgfs_tas_get_status_read()
702 pos += scnprintf(pos, endpos - pos, "\t%s (%d)\n", in iwl_dbgfs_tas_get_status_read()
706 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_tas_get_status_read()
708 rsp->tas_status_mac[i].near_disconnection ? in iwl_dbgfs_tas_get_status_read()
710 tmp = le16_to_cpu(rsp->tas_status_mac[i].max_reg_pwr_limit); in iwl_dbgfs_tas_get_status_read()
711 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_tas_get_status_read()
712 "Max. regulatory pwr limit (dBm): %d.%03d\n", in iwl_dbgfs_tas_get_status_read()
714 tmp = le16_to_cpu(rsp->tas_status_mac[i].sar_limit); in iwl_dbgfs_tas_get_status_read()
715 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_tas_get_status_read()
716 "SAR limit (dBm): %d.%03d\n", in iwl_dbgfs_tas_get_status_read()
721 ret = simple_read_from_buffer(user_buf, count, ppos, buff, pos - buff); in iwl_dbgfs_tas_get_status_read()
731 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_phy_integration_ver_read()
737 bufsz = mvm->fw->phy_integration_ver_len + 2; in iwl_dbgfs_phy_integration_ver_read()
740 return -ENOMEM; in iwl_dbgfs_phy_integration_ver_read()
742 pos = scnprintf(buf, bufsz, "%.*s\n", mvm->fw->phy_integration_ver_len, in iwl_dbgfs_phy_integration_ver_read()
743 mvm->fw->phy_integration_ver); in iwl_dbgfs_phy_integration_ver_read()
752 pos += scnprintf(buf + pos, bufsz - pos, \
754 le32_to_cpu(_struct->_memb))
760 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_fw_rx_stats_read()
761 static const char *fmt_table = "\t%-30s %10u\n"; in iwl_dbgfs_fw_rx_stats_read()
762 static const char *fmt_header = "%-32s\n"; in iwl_dbgfs_fw_rx_stats_read()
767 u8 cmd_ver = iwl_fw_lookup_cmd_ver(mvm->fw, in iwl_dbgfs_fw_rx_stats_read()
773 return -EOPNOTSUPP; in iwl_dbgfs_fw_rx_stats_read()
785 return -ENOMEM; in iwl_dbgfs_fw_rx_stats_read()
787 mutex_lock(&mvm->mutex); in iwl_dbgfs_fw_rx_stats_read()
792 pos += scnprintf(buf + pos, bufsz - pos, fmt_header, in iwl_dbgfs_fw_rx_stats_read()
793 "Statistics_Rx - OFDM"); in iwl_dbgfs_fw_rx_stats_read()
795 struct mvm_statistics_rx_phy_v2 *ofdm = &mvm->rx_stats_v3.ofdm; in iwl_dbgfs_fw_rx_stats_read()
818 struct mvm_statistics_rx_phy *ofdm = &mvm->rx_stats.ofdm; in iwl_dbgfs_fw_rx_stats_read()
827 pos += scnprintf(buf + pos, bufsz - pos, fmt_header, in iwl_dbgfs_fw_rx_stats_read()
828 "Statistics_Rx - CCK"); in iwl_dbgfs_fw_rx_stats_read()
830 struct mvm_statistics_rx_phy_v2 *cck = &mvm->rx_stats_v3.cck; in iwl_dbgfs_fw_rx_stats_read()
853 struct mvm_statistics_rx_phy *cck = &mvm->rx_stats.cck; in iwl_dbgfs_fw_rx_stats_read()
862 pos += scnprintf(buf + pos, bufsz - pos, fmt_header, in iwl_dbgfs_fw_rx_stats_read()
863 "Statistics_Rx - GENERAL"); in iwl_dbgfs_fw_rx_stats_read()
866 &mvm->rx_stats_v3.general; in iwl_dbgfs_fw_rx_stats_read()
894 &mvm->rx_stats.general; in iwl_dbgfs_fw_rx_stats_read()
918 pos += scnprintf(buf + pos, bufsz - pos, fmt_header, in iwl_dbgfs_fw_rx_stats_read()
919 "Statistics_Rx - HT"); in iwl_dbgfs_fw_rx_stats_read()
922 &mvm->rx_stats_v3.ofdm_ht; in iwl_dbgfs_fw_rx_stats_read()
936 &mvm->rx_stats.ofdm_ht; in iwl_dbgfs_fw_rx_stats_read()
944 mutex_unlock(&mvm->mutex); in iwl_dbgfs_fw_rx_stats_read()
963 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_fw_system_stats_read()
964 u8 cmd_ver = iwl_fw_lookup_cmd_ver(mvm->fw, in iwl_dbgfs_fw_system_stats_read()
974 return -ENOMEM; in iwl_dbgfs_fw_system_stats_read()
980 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_fw_system_stats_read()
985 mutex_lock(&mvm->mutex); in iwl_dbgfs_fw_system_stats_read()
994 if (vif->type == NL80211_IFTYPE_STATION) in iwl_dbgfs_fw_system_stats_read()
999 pos += scnprintf(pos, endpos - pos, "vif is NULL\n"); in iwl_dbgfs_fw_system_stats_read()
1005 pos += scnprintf(pos, endpos - pos, "mvmvif is NULL\n"); in iwl_dbgfs_fw_system_stats_read()
1010 struct iwl_mvm_vif_link_info *link_info = mvmvif->link[i]; in iwl_dbgfs_fw_system_stats_read()
1012 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_fw_system_stats_read()
1014 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_fw_system_stats_read()
1016 link_info->beacon_stats.num_beacons); in iwl_dbgfs_fw_system_stats_read()
1017 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_fw_system_stats_read()
1019 link_info->beacon_stats.accu_num_beacons); in iwl_dbgfs_fw_system_stats_read()
1020 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_fw_system_stats_read()
1022 link_info->beacon_stats.avg_signal); in iwl_dbgfs_fw_system_stats_read()
1025 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_fw_system_stats_read()
1027 mvm->radio_stats.rx_time); in iwl_dbgfs_fw_system_stats_read()
1028 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_fw_system_stats_read()
1030 mvm->radio_stats.tx_time); in iwl_dbgfs_fw_system_stats_read()
1031 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_fw_system_stats_read()
1033 mvm->accu_radio_stats.rx_time); in iwl_dbgfs_fw_system_stats_read()
1034 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_fw_system_stats_read()
1036 mvm->accu_radio_stats.tx_time); in iwl_dbgfs_fw_system_stats_read()
1039 mutex_unlock(&mvm->mutex); in iwl_dbgfs_fw_system_stats_read()
1042 ret = simple_read_from_buffer(user_buf, count, ppos, buff, pos - buff); in iwl_dbgfs_fw_system_stats_read()
1060 return -ENOMEM; in iwl_dbgfs_frame_stats_read()
1062 spin_lock_bh(&mvm->drv_stats_lock); in iwl_dbgfs_frame_stats_read()
1067 pos += scnprintf(pos, endpos - pos, in iwl_dbgfs_frame_stats_read()
1069 stats->legacy_frames, in iwl_dbgfs_frame_stats_read()
1070 stats->ht_frames, in iwl_dbgfs_frame_stats_read()
1071 stats->vht_frames); in iwl_dbgfs_frame_stats_read()
1072 pos += scnprintf(pos, endpos - pos, "20/40/80\t:\t%d/%d/%d\n", in iwl_dbgfs_frame_stats_read()
1073 stats->bw_20_frames, in iwl_dbgfs_frame_stats_read()
1074 stats->bw_40_frames, in iwl_dbgfs_frame_stats_read()
1075 stats->bw_80_frames); in iwl_dbgfs_frame_stats_read()
1076 pos += scnprintf(pos, endpos - pos, "NGI/SGI\t\t:\t%d/%d\n", in iwl_dbgfs_frame_stats_read()
1077 stats->ngi_frames, in iwl_dbgfs_frame_stats_read()
1078 stats->sgi_frames); in iwl_dbgfs_frame_stats_read()
1079 pos += scnprintf(pos, endpos - pos, "SISO/MIMO2\t:\t%d/%d\n", in iwl_dbgfs_frame_stats_read()
1080 stats->siso_frames, in iwl_dbgfs_frame_stats_read()
1081 stats->mimo2_frames); in iwl_dbgfs_frame_stats_read()
1082 pos += scnprintf(pos, endpos - pos, "FAIL/SCSS\t:\t%d/%d\n", in iwl_dbgfs_frame_stats_read()
1083 stats->fail_frames, in iwl_dbgfs_frame_stats_read()
1084 stats->success_frames); in iwl_dbgfs_frame_stats_read()
1085 pos += scnprintf(pos, endpos - pos, "MPDUs agg\t:\t%d\n", in iwl_dbgfs_frame_stats_read()
1086 stats->agg_frames); in iwl_dbgfs_frame_stats_read()
1087 pos += scnprintf(pos, endpos - pos, "A-MPDUs\t\t:\t%d\n", in iwl_dbgfs_frame_stats_read()
1088 stats->ampdu_count); in iwl_dbgfs_frame_stats_read()
1089 pos += scnprintf(pos, endpos - pos, "Avg MPDUs/A-MPDU:\t%d\n", in iwl_dbgfs_frame_stats_read()
1090 stats->ampdu_count > 0 ? in iwl_dbgfs_frame_stats_read()
1091 (stats->agg_frames / stats->ampdu_count) : 0); in iwl_dbgfs_frame_stats_read()
1093 pos += scnprintf(pos, endpos - pos, "Last Rates\n"); in iwl_dbgfs_frame_stats_read()
1095 idx = stats->last_frame_idx - 1; in iwl_dbgfs_frame_stats_read()
1096 for (i = 0; i < ARRAY_SIZE(stats->last_rates); i++) { in iwl_dbgfs_frame_stats_read()
1097 idx = (idx + 1) % ARRAY_SIZE(stats->last_rates); in iwl_dbgfs_frame_stats_read()
1098 if (stats->last_rates[idx] == 0) in iwl_dbgfs_frame_stats_read()
1100 pos += scnprintf(pos, endpos - pos, "Rate[%d]: ", in iwl_dbgfs_frame_stats_read()
1101 (int)(ARRAY_SIZE(stats->last_rates) - i)); in iwl_dbgfs_frame_stats_read()
1102 pos += rs_pretty_print_rate_v1(pos, endpos - pos, in iwl_dbgfs_frame_stats_read()
1103 stats->last_rates[idx]); in iwl_dbgfs_frame_stats_read()
1104 if (pos < endpos - 1) in iwl_dbgfs_frame_stats_read()
1107 spin_unlock_bh(&mvm->drv_stats_lock); in iwl_dbgfs_frame_stats_read()
1109 ret = simple_read_from_buffer(user_buf, count, ppos, buff, pos - buff); in iwl_dbgfs_frame_stats_read()
1119 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_drv_rx_stats_read()
1122 &mvm->drv_rx_stats); in iwl_dbgfs_drv_rx_stats_read()
1131 return -EIO; in iwl_dbgfs_fw_restart_write()
1133 mutex_lock(&mvm->mutex); in iwl_dbgfs_fw_restart_write()
1136 set_bit(IWL_MVM_STATUS_SUPPRESS_ERROR_LOG_ONCE, &mvm->status); in iwl_dbgfs_fw_restart_write()
1137 set_bit(STATUS_SUPPRESS_CMD_ERROR_ONCE, &mvm->trans->status); in iwl_dbgfs_fw_restart_write()
1140 /* take the return value to make compiler happy - it will fail anyway */ in iwl_dbgfs_fw_restart_write()
1145 mutex_unlock(&mvm->mutex); in iwl_dbgfs_fw_restart_write()
1154 return -EIO; in iwl_dbgfs_fw_nmi_write()
1159 set_bit(IWL_MVM_STATUS_SUPPRESS_ERROR_LOG_ONCE, &mvm->status); in iwl_dbgfs_fw_nmi_write()
1161 iwl_force_nmi(mvm->trans); in iwl_dbgfs_fw_nmi_write()
1171 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_scan_ant_rxchain_read()
1177 pos += scnprintf(buf + pos, bufsz - pos, "Antennas for scan: "); in iwl_dbgfs_scan_ant_rxchain_read()
1178 if (mvm->scan_rx_ant & ANT_A) in iwl_dbgfs_scan_ant_rxchain_read()
1179 pos += scnprintf(buf + pos, bufsz - pos, "A"); in iwl_dbgfs_scan_ant_rxchain_read()
1180 if (mvm->scan_rx_ant & ANT_B) in iwl_dbgfs_scan_ant_rxchain_read()
1181 pos += scnprintf(buf + pos, bufsz - pos, "B"); in iwl_dbgfs_scan_ant_rxchain_read()
1182 pos += scnprintf(buf + pos, bufsz - pos, " (%x)\n", mvm->scan_rx_ant); in iwl_dbgfs_scan_ant_rxchain_read()
1194 return -EIO; in iwl_dbgfs_scan_ant_rxchain_write()
1197 return -EINVAL; in iwl_dbgfs_scan_ant_rxchain_write()
1199 return -EINVAL; in iwl_dbgfs_scan_ant_rxchain_write()
1201 return -EINVAL; in iwl_dbgfs_scan_ant_rxchain_write()
1203 if (mvm->scan_rx_ant != scan_rx_ant) { in iwl_dbgfs_scan_ant_rxchain_write()
1204 mvm->scan_rx_ant = scan_rx_ant; in iwl_dbgfs_scan_ant_rxchain_write()
1205 if (fw_has_capa(&mvm->fw->ucode_capa, in iwl_dbgfs_scan_ant_rxchain_write()
1237 * queues 3 - 14). in iwl_dbgfs_indirection_tbl_write()
1249 mutex_lock(&mvm->mutex); in iwl_dbgfs_indirection_tbl_write()
1255 mutex_unlock(&mvm->mutex); in iwl_dbgfs_indirection_tbl_write()
1274 int ret = -EINVAL; in iwl_dbgfs_inject_packet_write()
1277 return -EIO; in iwl_dbgfs_inject_packet_write()
1280 if (!mvm->trans->trans_cfg->mq_rx_supported) in iwl_dbgfs_inject_packet_write()
1281 return -EOPNOTSUPP; in iwl_dbgfs_inject_packet_write()
1285 return -ENOMEM; in iwl_dbgfs_inject_packet_write()
1323 return -EINVAL; in _iwl_dbgfs_inject_beacon_ie()
1326 return -EIO; in _iwl_dbgfs_inject_beacon_ie()
1329 !fw_has_api(&mvm->fw->ucode_capa, in _iwl_dbgfs_inject_beacon_ie()
1331 return -EINVAL; in _iwl_dbgfs_inject_beacon_ie()
1333 mutex_lock(&mvm->mutex); in _iwl_dbgfs_inject_beacon_ie()
1340 if (vif->type == NL80211_IFTYPE_AP) in _iwl_dbgfs_inject_beacon_ie()
1347 mvm->hw->extra_beacon_tailroom = len; in _iwl_dbgfs_inject_beacon_ie()
1349 beacon = ieee80211_beacon_get_template(mvm->hw, vif, NULL, 0); in _iwl_dbgfs_inject_beacon_ie()
1358 mvm->beacon_inject_active = true; in _iwl_dbgfs_inject_beacon_ie()
1366 cpu_to_le16(iwl_mvm_mac_ctxt_get_beacon_flags(mvm->fw, in _iwl_dbgfs_inject_beacon_ie()
1368 beacon_cmd.byte_cnt = cpu_to_le16((u16)beacon->len); in _iwl_dbgfs_inject_beacon_ie()
1369 if (iwl_fw_lookup_cmd_ver(mvm->fw, BEACON_TEMPLATE_CMD, 0) > 12) in _iwl_dbgfs_inject_beacon_ie()
1371 cpu_to_le32(mvmvif->link[link_id]->fw_link_id); in _iwl_dbgfs_inject_beacon_ie()
1373 beacon_cmd.link_id = cpu_to_le32((u32)mvmvif->id); in _iwl_dbgfs_inject_beacon_ie()
1377 beacon->data, beacon->len); in _iwl_dbgfs_inject_beacon_ie()
1379 if (iwl_fw_lookup_cmd_ver(mvm->fw, in _iwl_dbgfs_inject_beacon_ie()
1381 u32 offset = iwl_find_ie_offset(beacon->data, in _iwl_dbgfs_inject_beacon_ie()
1383 beacon->len); in _iwl_dbgfs_inject_beacon_ie()
1391 mutex_unlock(&mvm->mutex); in _iwl_dbgfs_inject_beacon_ie()
1398 mutex_unlock(&mvm->mutex); in _iwl_dbgfs_inject_beacon_ie()
1399 return -EINVAL; in _iwl_dbgfs_inject_beacon_ie()
1408 mvm->hw->extra_beacon_tailroom = 0; in iwl_dbgfs_inject_beacon_ie_write()
1419 mvm->hw->extra_beacon_tailroom = 0; in iwl_dbgfs_inject_beacon_ie_restore_write()
1420 mvm->beacon_inject_active = false; in iwl_dbgfs_inject_beacon_ie_restore_write()
1428 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_fw_dbg_conf_read()
1434 mutex_lock(&mvm->mutex); in iwl_dbgfs_fw_dbg_conf_read()
1435 conf = mvm->fwrt.dump.conf; in iwl_dbgfs_fw_dbg_conf_read()
1436 mutex_unlock(&mvm->mutex); in iwl_dbgfs_fw_dbg_conf_read()
1438 pos += scnprintf(buf + pos, bufsz - pos, "%d\n", conf); in iwl_dbgfs_fw_dbg_conf_read()
1451 return -EIO; in iwl_dbgfs_fw_dbg_conf_write()
1458 return -EINVAL; in iwl_dbgfs_fw_dbg_conf_write()
1460 mutex_lock(&mvm->mutex); in iwl_dbgfs_fw_dbg_conf_write()
1461 ret = iwl_fw_start_dbg_conf(&mvm->fwrt, conf_id); in iwl_dbgfs_fw_dbg_conf_write()
1462 mutex_unlock(&mvm->mutex); in iwl_dbgfs_fw_dbg_conf_write()
1471 if (mvm->trans->trans_cfg->device_family < IWL_DEVICE_FAMILY_9000) in iwl_dbgfs_fw_dbg_clear_write()
1472 return -EOPNOTSUPP; in iwl_dbgfs_fw_dbg_clear_write()
1481 mutex_lock(&mvm->mutex); in iwl_dbgfs_fw_dbg_clear_write()
1482 iwl_fw_dbg_clear_monitor_buf(&mvm->fwrt); in iwl_dbgfs_fw_dbg_clear_write()
1483 mutex_unlock(&mvm->mutex); in iwl_dbgfs_fw_dbg_clear_write()
1495 return -EINVAL; in iwl_dbgfs_dbg_time_point_write()
1499 return -EINVAL; in iwl_dbgfs_dbg_time_point_write()
1501 iwl_dbg_tlv_time_point(&mvm->fwrt, timepoint, NULL); in iwl_dbgfs_dbg_time_point_write()
1527 struct ieee80211_link_sta *link_sta = file->private_data; in _iwl_dbgfs_link_sta_wrap_write()
1528 struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(link_sta->sta); in _iwl_dbgfs_link_sta_wrap_write()
1529 struct iwl_mvm *mvm = iwl_mvm_vif_from_mac80211(mvmsta->vif)->mvm; in _iwl_dbgfs_link_sta_wrap_write()
1533 mutex_lock(&mvm->mutex); in _iwl_dbgfs_link_sta_wrap_write()
1535 mvm_link_sta = rcu_dereference_protected(mvmsta->link[link_sta->link_id], in _iwl_dbgfs_link_sta_wrap_write()
1536 lockdep_is_held(&mvm->mutex)); in _iwl_dbgfs_link_sta_wrap_write()
1538 mutex_unlock(&mvm->mutex); in _iwl_dbgfs_link_sta_wrap_write()
1539 return -ENODEV; in _iwl_dbgfs_link_sta_wrap_write()
1544 mutex_unlock(&mvm->mutex); in _iwl_dbgfs_link_sta_wrap_write()
1559 struct ieee80211_link_sta *link_sta = file->private_data; in _iwl_dbgfs_link_sta_wrap_read()
1560 struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(link_sta->sta); in _iwl_dbgfs_link_sta_wrap_read()
1561 struct iwl_mvm *mvm = iwl_mvm_vif_from_mac80211(mvmsta->vif)->mvm; in _iwl_dbgfs_link_sta_wrap_read()
1565 mutex_lock(&mvm->mutex); in _iwl_dbgfs_link_sta_wrap_read()
1567 mvm_link_sta = rcu_dereference_protected(mvmsta->link[link_sta->link_id], in _iwl_dbgfs_link_sta_wrap_read()
1568 lockdep_is_held(&mvm->mutex)); in _iwl_dbgfs_link_sta_wrap_read()
1570 mutex_unlock(&mvm->mutex); in _iwl_dbgfs_link_sta_wrap_read()
1571 return -ENODEV; in _iwl_dbgfs_link_sta_wrap_read()
1576 mutex_unlock(&mvm->mutex); in _iwl_dbgfs_link_sta_wrap_read()
1587 size_t buf_size = min(count, sizeof(buf) - 1); \
1590 return -EFAULT; \
1644 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_prph_reg_read()
1649 if (!mvm->dbgfs_prph_reg_addr) in iwl_dbgfs_prph_reg_read()
1650 return -EINVAL; in iwl_dbgfs_prph_reg_read()
1652 pos += scnprintf(buf + pos, bufsz - pos, "Reg 0x%x: (0x%x)\n", in iwl_dbgfs_prph_reg_read()
1653 mvm->dbgfs_prph_reg_addr, in iwl_dbgfs_prph_reg_read()
1654 iwl_read_prph(mvm->trans, mvm->dbgfs_prph_reg_addr)); in iwl_dbgfs_prph_reg_read()
1666 args = sscanf(buf, "%i %i", &mvm->dbgfs_prph_reg_addr, &value); in iwl_dbgfs_prph_reg_write()
1667 /* if we only want to set the reg address - nothing more to do */ in iwl_dbgfs_prph_reg_write()
1673 return -EINVAL; in iwl_dbgfs_prph_reg_write()
1675 iwl_write_prph(mvm->trans, mvm->dbgfs_prph_reg_addr, value); in iwl_dbgfs_prph_reg_write()
1688 return -EIO; in iwl_dbgfs_send_echo_cmd_write()
1690 mutex_lock(&mvm->mutex); in iwl_dbgfs_send_echo_cmd_write()
1692 mutex_unlock(&mvm->mutex); in iwl_dbgfs_send_echo_cmd_write()
1708 apply->mvm->cur_aid = cpu_to_le16(apply->aid); in iwl_mvm_sniffer_apply()
1709 memcpy(apply->mvm->cur_bssid, apply->bssid, in iwl_mvm_sniffer_apply()
1710 sizeof(apply->mvm->cur_bssid)); in iwl_mvm_sniffer_apply()
1731 return -EIO; in iwl_dbgfs_he_sniffer_params_write()
1738 return -EINVAL; in iwl_dbgfs_he_sniffer_params_write()
1745 mutex_lock(&mvm->mutex); in iwl_dbgfs_he_sniffer_params_write()
1751 * still have mvm->cur_aid pointing to the old AID, and that in iwl_dbgfs_he_sniffer_params_write()
1754 * get mvm->cur_aid correctly set to the new AID. in iwl_dbgfs_he_sniffer_params_write()
1756 iwl_init_notification_wait(&mvm->notif_wait, &wait, in iwl_dbgfs_he_sniffer_params_write()
1766 iwl_remove_notification(&mvm->notif_wait, &wait); in iwl_dbgfs_he_sniffer_params_write()
1768 mutex_unlock(&mvm->mutex); in iwl_dbgfs_he_sniffer_params_write()
1777 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_he_sniffer_params_read()
1783 le16_to_cpu(mvm->cur_aid), mvm->cur_bssid[0], in iwl_dbgfs_he_sniffer_params_read()
1784 mvm->cur_bssid[1], mvm->cur_bssid[2], mvm->cur_bssid[3], in iwl_dbgfs_he_sniffer_params_read()
1785 mvm->cur_bssid[4], mvm->cur_bssid[5]); in iwl_dbgfs_he_sniffer_params_read()
1794 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_uapsd_noagg_bssids_read()
1800 mutex_lock(&mvm->mutex); in iwl_dbgfs_uapsd_noagg_bssids_read()
1803 pos += scnprintf(buf + pos, bufsz - pos, "%pM\n", in iwl_dbgfs_uapsd_noagg_bssids_read()
1804 mvm->uapsd_noagg_bssids[i].addr); in iwl_dbgfs_uapsd_noagg_bssids_read()
1806 mutex_unlock(&mvm->mutex); in iwl_dbgfs_uapsd_noagg_bssids_read()
1819 return -EIO; in iwl_dbgfs_ltr_config_write()
1829 return -EINVAL; in iwl_dbgfs_ltr_config_write()
1832 mutex_lock(&mvm->mutex); in iwl_dbgfs_ltr_config_write()
1835 mutex_unlock(&mvm->mutex); in iwl_dbgfs_ltr_config_write()
1850 return -EINVAL; in iwl_dbgfs_rfi_freq_table_write()
1852 /* value zero triggers re-sending the default table to the device */ in iwl_dbgfs_rfi_freq_table_write()
1854 mutex_lock(&mvm->mutex); in iwl_dbgfs_rfi_freq_table_write()
1856 mutex_unlock(&mvm->mutex); in iwl_dbgfs_rfi_freq_table_write()
1858 ret = -EOPNOTSUPP; /* in the future a new table will be added */ in iwl_dbgfs_rfi_freq_table_write()
1866 * the table; So, need 5 chars for the "freq: " part and each tuple afterwards
1876 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_rfi_freq_table_read()
1886 status = le32_to_cpu(resp->status); in iwl_dbgfs_rfi_freq_table_read()
1892 for (i = 0; i < ARRAY_SIZE(resp->table); i++) { in iwl_dbgfs_rfi_freq_table_read()
1893 pos += scnprintf(buf + pos, IWL_RFI_BUF_SIZE - pos, "%d: ", in iwl_dbgfs_rfi_freq_table_read()
1894 resp->table[i].freq); in iwl_dbgfs_rfi_freq_table_read()
1896 for (j = 0; j < ARRAY_SIZE(resp->table[i].channels); j++) in iwl_dbgfs_rfi_freq_table_read()
1897 pos += scnprintf(buf + pos, IWL_RFI_BUF_SIZE - pos, in iwl_dbgfs_rfi_freq_table_read()
1899 resp->table[i].channels[j], in iwl_dbgfs_rfi_freq_table_read()
1900 resp->table[i].bands[j]); in iwl_dbgfs_rfi_freq_table_read()
1901 pos += scnprintf(buf + pos, IWL_RFI_BUF_SIZE - pos, "\n"); in iwl_dbgfs_rfi_freq_table_read()
1958 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_mem_read()
1970 return -EIO; in iwl_dbgfs_mem_read()
1977 cmd.addr = cpu_to_le32(*ppos - delta); in iwl_dbgfs_mem_read()
1981 mutex_lock(&mvm->mutex); in iwl_dbgfs_mem_read()
1983 mutex_unlock(&mvm->mutex); in iwl_dbgfs_mem_read()
1989 ret = -EIO; in iwl_dbgfs_mem_read()
1993 rsp = (void *)hcmd.resp_pkt->data; in iwl_dbgfs_mem_read()
1994 if (le32_to_cpu(rsp->status) != DEBUG_MEM_STATUS_SUCCESS) { in iwl_dbgfs_mem_read()
1995 ret = -ENXIO; in iwl_dbgfs_mem_read()
1999 len = min((size_t)le32_to_cpu(rsp->len) << 2, in iwl_dbgfs_mem_read()
2000 iwl_rx_packet_payload_len(hcmd.resp_pkt) - sizeof(*rsp)); in iwl_dbgfs_mem_read()
2001 len = min(len - delta, count); in iwl_dbgfs_mem_read()
2003 ret = -EFAULT; in iwl_dbgfs_mem_read()
2007 ret = len - copy_to_user(user_buf, (u8 *)rsp->data + delta, len); in iwl_dbgfs_mem_read()
2019 struct iwl_mvm *mvm = file->private_data; in iwl_dbgfs_mem_write()
2029 return -EIO; in iwl_dbgfs_mem_write()
2035 len = min(count, (size_t)(4 - (*ppos & 0x3))); in iwl_dbgfs_mem_write()
2046 return -ENOMEM; in iwl_dbgfs_mem_write()
2048 cmd->op = cpu_to_le32(op); in iwl_dbgfs_mem_write()
2049 cmd->len = cpu_to_le32(len); in iwl_dbgfs_mem_write()
2050 cmd->addr = cpu_to_le32(*ppos); in iwl_dbgfs_mem_write()
2051 if (copy_from_user((void *)cmd->data, user_buf, data_size)) { in iwl_dbgfs_mem_write()
2053 return -EFAULT; in iwl_dbgfs_mem_write()
2060 mutex_lock(&mvm->mutex); in iwl_dbgfs_mem_write()
2062 mutex_unlock(&mvm->mutex); in iwl_dbgfs_mem_write()
2070 ret = -EIO; in iwl_dbgfs_mem_write()
2074 rsp = (void *)hcmd.resp_pkt->data; in iwl_dbgfs_mem_write()
2075 if (rsp->status != DEBUG_MEM_STATUS_SUCCESS) { in iwl_dbgfs_mem_write()
2076 ret = -ENXIO; in iwl_dbgfs_mem_write()
2113 spin_lock_init(&mvm->drv_stats_lock); in iwl_mvm_dbgfs_register()
2115 MVM_DEBUGFS_ADD_FILE(tx_flush, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2116 MVM_DEBUGFS_ADD_FILE(sram, mvm->debugfs_dir, 0600); in iwl_mvm_dbgfs_register()
2117 MVM_DEBUGFS_ADD_FILE(set_nic_temperature, mvm->debugfs_dir, 0600); in iwl_mvm_dbgfs_register()
2118 MVM_DEBUGFS_ADD_FILE(nic_temp, mvm->debugfs_dir, 0400); in iwl_mvm_dbgfs_register()
2119 MVM_DEBUGFS_ADD_FILE(ctdp_budget, mvm->debugfs_dir, 0400); in iwl_mvm_dbgfs_register()
2120 MVM_DEBUGFS_ADD_FILE(stop_ctdp, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2121 MVM_DEBUGFS_ADD_FILE(start_ctdp, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2122 MVM_DEBUGFS_ADD_FILE(force_ctkill, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2123 MVM_DEBUGFS_ADD_FILE(stations, mvm->debugfs_dir, 0400); in iwl_mvm_dbgfs_register()
2124 MVM_DEBUGFS_ADD_FILE(disable_power_off, mvm->debugfs_dir, 0600); in iwl_mvm_dbgfs_register()
2125 MVM_DEBUGFS_ADD_FILE(fw_rx_stats, mvm->debugfs_dir, 0400); in iwl_mvm_dbgfs_register()
2126 MVM_DEBUGFS_ADD_FILE(drv_rx_stats, mvm->debugfs_dir, 0400); in iwl_mvm_dbgfs_register()
2127 MVM_DEBUGFS_ADD_FILE(fw_system_stats, mvm->debugfs_dir, 0400); in iwl_mvm_dbgfs_register()
2128 MVM_DEBUGFS_ADD_FILE(fw_restart, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2129 MVM_DEBUGFS_ADD_FILE(fw_nmi, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2130 MVM_DEBUGFS_ADD_FILE(scan_ant_rxchain, mvm->debugfs_dir, 0600); in iwl_mvm_dbgfs_register()
2131 MVM_DEBUGFS_ADD_FILE(prph_reg, mvm->debugfs_dir, 0600); in iwl_mvm_dbgfs_register()
2132 MVM_DEBUGFS_ADD_FILE(fw_dbg_conf, mvm->debugfs_dir, 0600); in iwl_mvm_dbgfs_register()
2133 MVM_DEBUGFS_ADD_FILE(fw_dbg_clear, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2134 MVM_DEBUGFS_ADD_FILE(dbg_time_point, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2135 MVM_DEBUGFS_ADD_FILE(send_echo_cmd, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2136 MVM_DEBUGFS_ADD_FILE(indirection_tbl, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2137 MVM_DEBUGFS_ADD_FILE(inject_packet, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2138 MVM_DEBUGFS_ADD_FILE(inject_beacon_ie, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2139 MVM_DEBUGFS_ADD_FILE(inject_beacon_ie_restore, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2140 MVM_DEBUGFS_ADD_FILE(rfi_freq_table, mvm->debugfs_dir, 0600); in iwl_mvm_dbgfs_register()
2142 if (mvm->fw->phy_integration_ver) in iwl_mvm_dbgfs_register()
2143 MVM_DEBUGFS_ADD_FILE(phy_integration_ver, mvm->debugfs_dir, 0400); in iwl_mvm_dbgfs_register()
2144 MVM_DEBUGFS_ADD_FILE(tas_get_status, mvm->debugfs_dir, 0400); in iwl_mvm_dbgfs_register()
2146 MVM_DEBUGFS_ADD_FILE(sar_geo_profile, mvm->debugfs_dir, 0400); in iwl_mvm_dbgfs_register()
2147 MVM_DEBUGFS_ADD_FILE(wifi_6e_enable, mvm->debugfs_dir, 0400); in iwl_mvm_dbgfs_register()
2149 MVM_DEBUGFS_ADD_FILE(he_sniffer_params, mvm->debugfs_dir, 0600); in iwl_mvm_dbgfs_register()
2151 if (fw_has_capa(&mvm->fw->ucode_capa, IWL_UCODE_TLV_CAPA_SET_LTR_GEN2)) in iwl_mvm_dbgfs_register()
2152 MVM_DEBUGFS_ADD_FILE(ltr_config, mvm->debugfs_dir, 0200); in iwl_mvm_dbgfs_register()
2155 mvm->debugfs_dir, &mvm->scan_iter_notif_enabled); in iwl_mvm_dbgfs_register()
2156 debugfs_create_bool("drop_bcn_ap_mode", 0600, mvm->debugfs_dir, in iwl_mvm_dbgfs_register()
2157 &mvm->drop_bcn_ap_mode); in iwl_mvm_dbgfs_register()
2159 MVM_DEBUGFS_ADD_FILE(uapsd_noagg_bssids, mvm->debugfs_dir, S_IRUSR); in iwl_mvm_dbgfs_register()
2162 MVM_DEBUGFS_ADD_FILE(d3_test, mvm->debugfs_dir, 0400); in iwl_mvm_dbgfs_register()
2163 debugfs_create_bool("d3_wake_sysassert", 0600, mvm->debugfs_dir, in iwl_mvm_dbgfs_register()
2164 &mvm->d3_wake_sysassert); in iwl_mvm_dbgfs_register()
2165 debugfs_create_u32("last_netdetect_scans", 0400, mvm->debugfs_dir, in iwl_mvm_dbgfs_register()
2166 &mvm->last_netdetect_scans); in iwl_mvm_dbgfs_register()
2169 debugfs_create_u8("ps_disabled", 0400, mvm->debugfs_dir, in iwl_mvm_dbgfs_register()
2170 &mvm->ps_disabled); in iwl_mvm_dbgfs_register()
2171 debugfs_create_blob("nvm_hw", 0400, mvm->debugfs_dir, in iwl_mvm_dbgfs_register()
2172 &mvm->nvm_hw_blob); in iwl_mvm_dbgfs_register()
2173 debugfs_create_blob("nvm_sw", 0400, mvm->debugfs_dir, in iwl_mvm_dbgfs_register()
2174 &mvm->nvm_sw_blob); in iwl_mvm_dbgfs_register()
2175 debugfs_create_blob("nvm_calib", 0400, mvm->debugfs_dir, in iwl_mvm_dbgfs_register()
2176 &mvm->nvm_calib_blob); in iwl_mvm_dbgfs_register()
2177 debugfs_create_blob("nvm_prod", 0400, mvm->debugfs_dir, in iwl_mvm_dbgfs_register()
2178 &mvm->nvm_prod_blob); in iwl_mvm_dbgfs_register()
2179 debugfs_create_blob("nvm_phy_sku", 0400, mvm->debugfs_dir, in iwl_mvm_dbgfs_register()
2180 &mvm->nvm_phy_sku_blob); in iwl_mvm_dbgfs_register()
2182 mvm->debugfs_dir, &mvm->nvm_reg_blob); in iwl_mvm_dbgfs_register()
2184 debugfs_create_file("mem", 0600, mvm->debugfs_dir, mvm, in iwl_mvm_dbgfs_register()
2187 debugfs_create_bool("rx_ts_ptp", 0600, mvm->debugfs_dir, in iwl_mvm_dbgfs_register()
2188 &mvm->rx_ts_ptp); in iwl_mvm_dbgfs_register()
2194 if (!IS_ERR(mvm->debugfs_dir)) { in iwl_mvm_dbgfs_register()
2197 snprintf(buf, 100, "../../%pd2", mvm->debugfs_dir->d_parent); in iwl_mvm_dbgfs_register()
2198 debugfs_create_symlink("iwlwifi", mvm->hw->wiphy->debugfsdir, in iwl_mvm_dbgfs_register()