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

1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
3 * Copyright (C) 2024-2025 Intel Corporation
8 #include "iwl-io.h"
16 #include "iwl-utils.h"
25 #include "fw/dhc-utils.h"
40 return !mld->fw_status.running || mld->fw_status.in_d3; in iwl_mld_dbgfs_fw_cmd_disabled()
42 return !mld->fw_status.running; in iwl_mld_dbgfs_fw_cmd_disabled()
55 iwl_fw_dbg_clear_monitor_buf(&mld->fwrt); in iwl_dbgfs_fw_dbg_clear_write()
64 return -EIO; in iwl_dbgfs_fw_nmi_write()
69 mld->fw_status.do_not_dump_once = true; in iwl_dbgfs_fw_nmi_write()
71 iwl_force_nmi(mld->trans); in iwl_dbgfs_fw_nmi_write()
82 return -EPERM; in iwl_dbgfs_fw_restart_write()
85 return -EIO; in iwl_dbgfs_fw_restart_write()
88 mld->fw_status.do_not_dump_once = true; in iwl_dbgfs_fw_restart_write()
89 set_bit(STATUS_SUPPRESS_CMD_ERROR_ONCE, &mld->trans->status); in iwl_dbgfs_fw_restart_write()
92 /* take the return value to make compiler happy - it will in iwl_dbgfs_fw_restart_write()
104 return -EIO; in iwl_dbgfs_send_echo_cmd_write()
120 apply->mld->monitor.cur_aid = cpu_to_le16(apply->aid); in iwl_mld_sniffer_apply()
121 memcpy(apply->mld->monitor.cur_bssid, apply->bssid, in iwl_mld_sniffer_apply()
122 sizeof(apply->mld->monitor.cur_bssid)); in iwl_mld_sniffer_apply()
143 return -EIO; in iwl_dbgfs_he_sniffer_params_write()
145 if (!mld->monitor.on) in iwl_dbgfs_he_sniffer_params_write()
146 return -ENODEV; in iwl_dbgfs_he_sniffer_params_write()
153 return -EINVAL; in iwl_dbgfs_he_sniffer_params_write()
163 * still have mld->cur_aid pointing to the old AID, and that in iwl_dbgfs_he_sniffer_params_write()
166 * get mld->cur_aid correctly set to the new AID. in iwl_dbgfs_he_sniffer_params_write()
168 iwl_init_notification_wait(&mld->notif_wait, &wait, in iwl_dbgfs_he_sniffer_params_write()
178 iwl_remove_notification(&mld->notif_wait, &wait); in iwl_dbgfs_he_sniffer_params_write()
188 le16_to_cpu(mld->monitor.cur_aid), in iwl_dbgfs_he_sniffer_params_read()
189 mld->monitor.cur_bssid[0], mld->monitor.cur_bssid[1], in iwl_dbgfs_he_sniffer_params_read()
190 mld->monitor.cur_bssid[2], mld->monitor.cur_bssid[3], in iwl_dbgfs_he_sniffer_params_read()
191 mld->monitor.cur_bssid[4], mld->monitor.cur_bssid[5]); in iwl_dbgfs_he_sniffer_params_read()
196 * the table; So, need 5 chars for the "freq: " part and each tuple afterwards
219 "Due To SAR Limit Less Than 6 dBm", in iwl_mld_dump_tas_resp()
239 if (resp->header.version != 1) { in iwl_mld_dump_tas_resp()
240 pos += scnprintf(buf + pos, count - pos, in iwl_mld_dump_tas_resp()
242 resp->header.version); in iwl_mld_dump_tas_resp()
246 pos += scnprintf(buf + pos, count - pos, "TAS Report\n"); in iwl_mld_dump_tas_resp()
247 switch (resp->tas_config_info.table_source) { in iwl_mld_dump_tas_resp()
249 pos += scnprintf(buf + pos, count - pos, in iwl_mld_dump_tas_resp()
253 pos += scnprintf(buf + pos, count - pos, in iwl_mld_dump_tas_resp()
257 pos += scnprintf(buf + pos, count - pos, in iwl_mld_dump_tas_resp()
261 pos += scnprintf(buf + pos, count - pos, in iwl_mld_dump_tas_resp()
263 resp->tas_config_info.table_source); in iwl_mld_dump_tas_resp()
267 pos += scnprintf(buf + pos, count - pos, in iwl_mld_dump_tas_resp()
269 resp->tas_config_info.table_revision, in iwl_mld_dump_tas_resp()
270 resp->tas_config_info.value); in iwl_mld_dump_tas_resp()
271 pos += scnprintf(buf + pos, count - pos, "Current MCC: 0x%x\n", in iwl_mld_dump_tas_resp()
272 le16_to_cpu(resp->curr_mcc)); in iwl_mld_dump_tas_resp()
274 pos += scnprintf(buf + pos, count - pos, "Block list entries:"); in iwl_mld_dump_tas_resp()
275 for (int i = 0; i < ARRAY_SIZE(resp->mcc_block_list); i++) in iwl_mld_dump_tas_resp()
276 pos += scnprintf(buf + pos, count - pos, " 0x%x", in iwl_mld_dump_tas_resp()
277 le16_to_cpu(resp->mcc_block_list[i])); in iwl_mld_dump_tas_resp()
279 pos += scnprintf(buf + pos, count - pos, in iwl_mld_dump_tas_resp()
281 hweight8(resp->valid_radio_mask) > 1 ? in iwl_mld_dump_tas_resp()
284 for (int i = 0; i < ARRAY_SIZE(resp->tas_status_radio); i++) { in iwl_mld_dump_tas_resp()
288 if (!(resp->valid_radio_mask & BIT(i))) in iwl_mld_dump_tas_resp()
291 pos += scnprintf(buf + pos, count - pos, in iwl_mld_dump_tas_resp()
293 pos += scnprintf(buf + pos, count - pos, in iwl_mld_dump_tas_resp()
295 resp->tas_status_radio[i].static_status ? in iwl_mld_dump_tas_resp()
297 if (!resp->tas_status_radio[i].static_status) { in iwl_mld_dump_tas_resp()
299 resp->tas_status_radio[i].static_disable_reason; in iwl_mld_dump_tas_resp()
301 pos += scnprintf(buf + pos, count - pos, in iwl_mld_dump_tas_resp()
304 pos += scnprintf(buf + pos, count - pos, in iwl_mld_dump_tas_resp()
310 pos += scnprintf(buf + pos, count - pos, in iwl_mld_dump_tas_resp()
317 pos += scnprintf(buf + pos, count - pos, "\tANT A %s and ", in iwl_mld_dump_tas_resp()
318 (resp->tas_status_radio[i].dynamic_status_ant_a in iwl_mld_dump_tas_resp()
321 pos += scnprintf(buf + pos, count - pos, "ANT B %s for ", in iwl_mld_dump_tas_resp()
322 (resp->tas_status_radio[i].dynamic_status_ant_b in iwl_mld_dump_tas_resp()
325 switch (resp->tas_status_radio[i].band) { in iwl_mld_dump_tas_resp()
327 pos += scnprintf(buf + pos, count - pos, "HB\n"); in iwl_mld_dump_tas_resp()
330 pos += scnprintf(buf + pos, count - pos, "LB\n"); in iwl_mld_dump_tas_resp()
333 pos += scnprintf(buf + pos, count - pos, "UHB\n"); in iwl_mld_dump_tas_resp()
336 pos += scnprintf(buf + pos, count - pos, in iwl_mld_dump_tas_resp()
338 resp->tas_status_radio[i].band); in iwl_mld_dump_tas_resp()
342 pos += scnprintf(buf + pos, count - pos, in iwl_mld_dump_tas_resp()
344 resp->tas_status_radio[i].near_disconnection ? in iwl_mld_dump_tas_resp()
347 pos += scnprintf(buf + pos, count - pos, in iwl_mld_dump_tas_resp()
349 dynamic_status = resp->tas_status_radio[i].dynamic_status_ant_a; in iwl_mld_dump_tas_resp()
351 pos += scnprintf(buf + pos, count - pos, "\t%s (%d)\n", in iwl_mld_dump_tas_resp()
354 pos += scnprintf(buf + pos, count - pos, in iwl_mld_dump_tas_resp()
356 dynamic_status = resp->tas_status_radio[i].dynamic_status_ant_b; in iwl_mld_dump_tas_resp()
358 pos += scnprintf(buf + pos, count - pos, "\t%s (%d)\n", in iwl_mld_dump_tas_resp()
362 tmp = le16_to_cpu(resp->tas_status_radio[i].max_reg_pwr_limit_ant_a); in iwl_mld_dump_tas_resp()
363 pos += scnprintf(buf + pos, count - pos, in iwl_mld_dump_tas_resp()
364 "Max antenna A regulatory pwr limit (dBm): %d.%03d\n", in iwl_mld_dump_tas_resp()
366 tmp = le16_to_cpu(resp->tas_status_radio[i].max_reg_pwr_limit_ant_b); in iwl_mld_dump_tas_resp()
367 pos += scnprintf(buf + pos, count - pos, in iwl_mld_dump_tas_resp()
368 "Max antenna B regulatory pwr limit (dBm): %d.%03d\n", in iwl_mld_dump_tas_resp()
371 tmp = le16_to_cpu(resp->tas_status_radio[i].sar_limit_ant_a); in iwl_mld_dump_tas_resp()
372 pos += scnprintf(buf + pos, count - pos, in iwl_mld_dump_tas_resp()
373 "Antenna A SAR limit (dBm): %d.%03d\n", in iwl_mld_dump_tas_resp()
375 tmp = le16_to_cpu(resp->tas_status_radio[i].sar_limit_ant_b); in iwl_mld_dump_tas_resp()
376 pos += scnprintf(buf + pos, count - pos, in iwl_mld_dump_tas_resp()
377 "Antenna B SAR limit (dBm): %d.%03d\n", in iwl_mld_dump_tas_resp()
405 return -EIO; in iwl_dbgfs_tas_get_status_read()
411 pos += scnprintf(buf + pos, count - pos, "\nOEM name: %s\n", in iwl_dbgfs_tas_get_status_read()
413 pos += scnprintf(buf + pos, count - pos, in iwl_dbgfs_tas_get_status_read()
417 status = iwl_dhc_resp_status(mld->fwrt.fw, hcmd.resp_pkt); in iwl_dbgfs_tas_get_status_read()
419 pos += scnprintf(buf + pos, count - pos, in iwl_dbgfs_tas_get_status_read()
425 resp = iwl_dhc_resp_data(mld->fwrt.fw, hcmd.resp_pkt, &resp_len); in iwl_dbgfs_tas_get_status_read()
427 pos += scnprintf(buf + pos, count - pos, in iwl_dbgfs_tas_get_status_read()
433 pos += iwl_mld_dump_tas_resp(resp, count - pos, buf + pos); in iwl_dbgfs_tas_get_status_read()
453 err = iwl_bios_get_dsm(&mld->fwrt, DSM_FUNC_ENABLE_6E, &value); in iwl_dbgfs_wifi_6e_enable_read()
471 int ret = -EINVAL; in iwl_dbgfs_inject_packet_write()
474 return -EIO; in iwl_dbgfs_inject_packet_write()
478 return -ENOMEM; in iwl_dbgfs_inject_packet_write()
509 return -EIO; in iwl_dbgfs_stop_ctdp_write()
511 return iwl_mld_config_ctdp(mld, mld->cooling_dev.cur_state, in iwl_dbgfs_stop_ctdp_write()
521 return -EIO; in iwl_dbgfs_start_ctdp_write()
523 return iwl_mld_config_ctdp(mld, mld->cooling_dev.cur_state, in iwl_dbgfs_start_ctdp_write()
555 snprintf(buf, 100, "../../%pd2", debugfs_dir->d_parent); in iwl_mld_add_debugfs_files()
556 debugfs_create_symlink("iwlwifi", mld->wiphy->debugfsdir, in iwl_mld_add_debugfs_files()
578 int link_id = vif->active_links ? __ffs(vif->active_links) : 0; in iwl_dbgfs_vif_bf_params_write()
584 return -EINVAL; in iwl_dbgfs_vif_bf_params_write()
586 return -EINVAL; in iwl_dbgfs_vif_bf_params_write()
590 return -EINVAL; in iwl_dbgfs_vif_bf_params_write()
594 return -ENODEV; in iwl_dbgfs_vif_bf_params_write()
597 return -EIO; in iwl_dbgfs_vif_bf_params_write()
599 mld_vif->disable_bf = !val; in iwl_dbgfs_vif_bf_params_write()
618 return -EINVAL; in iwl_dbgfs_vif_pm_params_write()
620 return -EINVAL; in iwl_dbgfs_vif_pm_params_write()
624 return -EIO; in iwl_dbgfs_vif_pm_params_write()
626 mld_vif->use_ps_poll = val; in iwl_dbgfs_vif_pm_params_write()
644 return -EINVAL; in iwl_dbgfs_vif_low_latency_write()
659 return -EINVAL; in iwl_dbgfs_vif_low_latency_read()
661 ll_causes = READ_ONCE(mld_vif->low_latency_causes); in iwl_dbgfs_vif_low_latency_read()
689 return -EINVAL; in _iwl_dbgfs_inject_beacon_ie()
692 return -EIO; in _iwl_dbgfs_inject_beacon_ie()
695 return -EINVAL; in _iwl_dbgfs_inject_beacon_ie()
698 mld_vif->beacon_inject_active = true; in _iwl_dbgfs_inject_beacon_ie()
699 mld->hw->extra_beacon_tailroom = n_bytes; in _iwl_dbgfs_inject_beacon_ie()
707 wiphy_dereference(mld->wiphy, link_conf->chanctx_conf); in _iwl_dbgfs_inject_beacon_ie()
709 ieee80211_beacon_get_template(mld->hw, vif, in _iwl_dbgfs_inject_beacon_ie()
713 return -EINVAL; in _iwl_dbgfs_inject_beacon_ie()
719 return -EINVAL; in _iwl_dbgfs_inject_beacon_ie()
727 ctx->def.chan->band)); in _iwl_dbgfs_inject_beacon_ie()
728 beacon_cmd.byte_cnt = cpu_to_le16((u16)beacon->len); in _iwl_dbgfs_inject_beacon_ie()
730 cpu_to_le32(mld_link->fw_id); in _iwl_dbgfs_inject_beacon_ie()
733 beacon->data, beacon->len); in _iwl_dbgfs_inject_beacon_ie()
735 offset = iwl_find_ie_offset(beacon->data, in _iwl_dbgfs_inject_beacon_ie()
737 beacon->len); in _iwl_dbgfs_inject_beacon_ie()
746 mld_vif->beacon_inject_active = false; in _iwl_dbgfs_inject_beacon_ie()
760 mld->hw->extra_beacon_tailroom = 0; in iwl_dbgfs_vif_inject_beacon_ie_write()
776 mld->hw->extra_beacon_tailroom = 0; in iwl_dbgfs_vif_inject_beacon_ie_restore_write()
800 return -EIO; in iwl_dbgfs_vif_twt_setup_write()
809 (ret == 10 && vif->type != NL80211_IFTYPE_STATION && in iwl_dbgfs_vif_twt_setup_write()
811 return -EINVAL; in iwl_dbgfs_vif_twt_setup_write()
814 * In STA mode - the TWT type (broadcast or individual) in iwl_dbgfs_vif_twt_setup_write()
815 * In AP mode - the role (0 responder, 2 unsolicited) in iwl_dbgfs_vif_twt_setup_write()
818 if (vif->type == NL80211_IFTYPE_STATION) in iwl_dbgfs_vif_twt_setup_write()
826 return -ENOMEM; in iwl_dbgfs_vif_twt_setup_write()
828 dhc_twt_cmd = (void *)cmd->data; in iwl_dbgfs_vif_twt_setup_write()
829 dhc_twt_cmd->mac_id = cpu_to_le32(mld_vif->fw_id); in iwl_dbgfs_vif_twt_setup_write()
830 dhc_twt_cmd->twt_operation = cpu_to_le32(twt_operation); in iwl_dbgfs_vif_twt_setup_write()
831 dhc_twt_cmd->target_wake_time = cpu_to_le64(target_wake_time); in iwl_dbgfs_vif_twt_setup_write()
832 dhc_twt_cmd->interval_exp = cpu_to_le32(interval_exp); in iwl_dbgfs_vif_twt_setup_write()
833 dhc_twt_cmd->interval_mantissa = cpu_to_le32(interval_mantissa); in iwl_dbgfs_vif_twt_setup_write()
834 dhc_twt_cmd->min_wake_duration = cpu_to_le32(min_wake_duration); in iwl_dbgfs_vif_twt_setup_write()
835 dhc_twt_cmd->trigger = trigger; in iwl_dbgfs_vif_twt_setup_write()
836 dhc_twt_cmd->flow_type = flow_type; in iwl_dbgfs_vif_twt_setup_write()
837 dhc_twt_cmd->flow_id = flow_id; in iwl_dbgfs_vif_twt_setup_write()
838 dhc_twt_cmd->protection = protection; in iwl_dbgfs_vif_twt_setup_write()
839 dhc_twt_cmd->twt_request = twt_request; in iwl_dbgfs_vif_twt_setup_write()
840 dhc_twt_cmd->negotiation_type = broadcast ? 3 : 0; in iwl_dbgfs_vif_twt_setup_write()
842 cmd->length = cpu_to_le32(sizeof(*dhc_twt_cmd) >> 2); in iwl_dbgfs_vif_twt_setup_write()
843 cmd->index_and_mask = in iwl_dbgfs_vif_twt_setup_write()
864 int link_id = vif->active_links ? __ffs(vif->active_links) : 0; in iwl_dbgfs_vif_twt_operation_write()
870 return -ENODEV; in iwl_dbgfs_vif_twt_operation_write()
873 return -EIO; in iwl_dbgfs_vif_twt_operation_write()
875 if (hweight16(vif->active_links) > 1) in iwl_dbgfs_vif_twt_operation_write()
876 return -EOPNOTSUPP; in iwl_dbgfs_vif_twt_operation_write()
893 return -EINVAL; in iwl_dbgfs_vif_twt_operation_write()
895 twt_cmd.link_id = cpu_to_le32(mld_link->fw_id); in iwl_dbgfs_vif_twt_operation_write()
912 if (!vif->cfg.assoc || !ieee80211_vif_is_mld(vif)) in iwl_dbgfs_vif_int_mlo_scan_write()
913 return -EINVAL; in iwl_dbgfs_vif_int_mlo_scan_write()
916 return -EINVAL; in iwl_dbgfs_vif_int_mlo_scan_write()
924 ret = -EINVAL; in iwl_dbgfs_vif_int_mlo_scan_write()
936 debugfs_create_dir("iwlmld", vif->debugfs_dir); in iwl_mld_add_vif_debugfs()
947 * netdev:wlan0 -> ../../../ieee80211/phy0/netdev:wlan0/iwlmld/ in iwl_mld_add_vif_debugfs()
949 snprintf(name, sizeof(name), "%pd", vif->debugfs_dir); in iwl_mld_add_vif_debugfs()
951 vif->debugfs_dir); in iwl_mld_add_vif_debugfs()
952 if (!mld_vif->dbgfs_slink) in iwl_mld_add_vif_debugfs()
953 mld_vif->dbgfs_slink = in iwl_mld_add_vif_debugfs()
954 debugfs_create_symlink(name, mld->debugfs_dir, target); in iwl_mld_add_vif_debugfs()
957 vif->type == NL80211_IFTYPE_STATION) { in iwl_mld_add_vif_debugfs()
962 if (vif->type == NL80211_IFTYPE_AP) { in iwl_mld_add_vif_debugfs()
991 /* For non-MLO vifs, the dir of deflink is the same as the vif's one. in iwl_mld_add_link_debugfs()
993 * If not, this is a per-link dir of a MLO vif, add in it the iwlmld in iwl_mld_add_link_debugfs()
1013 return -EINVAL; in iwl_dbgfs_fixed_rate_write()
1015 fw_sta_id = mld_link_sta->fw_id; in iwl_dbgfs_fixed_rate_write()
1018 return -EINVAL; in iwl_dbgfs_fixed_rate_write()
1021 return -EIO; in iwl_dbgfs_fixed_rate_write()
1047 return -EINVAL; in iwl_dbgfs_tlc_dhc_write()
1049 fw_sta_id = mld_link_sta->fw_id; in iwl_dbgfs_tlc_dhc_write()
1053 return -EINVAL; in iwl_dbgfs_tlc_dhc_write()
1057 return -EIO; in iwl_dbgfs_tlc_dhc_write()