Lines Matching refs:mvm

83 	struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode);  in iwl_mvm_nic_config()  local
86 u32 phy_config = iwl_mvm_get_phy_config(mvm); in iwl_mvm_nic_config()
96 reg_val = CSR_HW_REV_STEP_DASH(mvm->trans->hw_rev); in iwl_mvm_nic_config()
114 if (mvm->trans->trans_cfg->device_family < IWL_DEVICE_FAMILY_8000) in iwl_mvm_nic_config()
117 if (iwl_fw_dbg_is_d3_debug_enabled(&mvm->fwrt)) in iwl_mvm_nic_config()
120 iwl_trans_set_bits_mask(mvm->trans, CSR_HW_IF_CONFIG_REG, in iwl_mvm_nic_config()
130 IWL_DEBUG_INFO(mvm, "Radio type=0x%x-0x%x-0x%x\n", radio_cfg_type, in iwl_mvm_nic_config()
138 if (!mvm->trans->cfg->apmg_not_supported) in iwl_mvm_nic_config()
139 iwl_set_bits_mask_prph(mvm->trans, APMG_PS_CTRL_REG, in iwl_mvm_nic_config()
144 static void iwl_mvm_rx_monitor_notif(struct iwl_mvm *mvm, in iwl_mvm_rx_monitor_notif() argument
156 vif = iwl_mvm_get_vif_by_macid(mvm, notif->mac_id); in iwl_mvm_rx_monitor_notif()
169 if (mvm->cca_40mhz_workaround) in iwl_mvm_rx_monitor_notif()
176 mvm->cca_40mhz_workaround = 2; in iwl_mvm_rx_monitor_notif()
185 sband = mvm->hw->wiphy->bands[NL80211_BAND_2GHZ]; in iwl_mvm_rx_monitor_notif()
211 struct iwl_mvm *mvm = mvmvif->mvm; in iwl_mvm_apply_fw_smps_request() local
214 if (mvm->fw_static_smps_request && in iwl_mvm_apply_fw_smps_request()
219 iwl_mvm_update_smps(mvm, vif, IWL_MVM_SMPS_REQ_FW, mode); in iwl_mvm_apply_fw_smps_request()
228 static void iwl_mvm_rx_thermal_dual_chain_req(struct iwl_mvm *mvm, in iwl_mvm_rx_thermal_dual_chain_req() argument
238 mvm->fw_static_smps_request = in iwl_mvm_rx_thermal_dual_chain_req()
240 ieee80211_iterate_interfaces(mvm->hw, in iwl_mvm_rx_thermal_dual_chain_req()
271 void (*fn)(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb);
616 static u32 iwl_mvm_min_backoff(struct iwl_mvm *mvm) in iwl_mvm_min_backoff() argument
618 const struct iwl_pwr_tx_backoff *backoff = mvm->cfg->pwr_tx_backoffs; in iwl_mvm_min_backoff()
624 dflt_pwr_limit = iwl_acpi_get_pwr_limit(mvm->dev); in iwl_mvm_min_backoff()
638 struct iwl_mvm *mvm = in iwl_mvm_tx_unblock_dwork() local
643 mutex_lock(&mvm->mutex); in iwl_mvm_tx_unblock_dwork()
646 rcu_dereference_protected(mvm->csa_tx_blocked_vif, in iwl_mvm_tx_unblock_dwork()
647 lockdep_is_held(&mvm->mutex)); in iwl_mvm_tx_unblock_dwork()
653 iwl_mvm_modify_all_sta_disable_tx(mvm, mvmvif, false); in iwl_mvm_tx_unblock_dwork()
654 RCU_INIT_POINTER(mvm->csa_tx_blocked_vif, NULL); in iwl_mvm_tx_unblock_dwork()
656 mutex_unlock(&mvm->mutex); in iwl_mvm_tx_unblock_dwork()
661 struct iwl_mvm *mvm = ctx; in iwl_mvm_fwrt_dump_start() local
663 mutex_lock(&mvm->mutex); in iwl_mvm_fwrt_dump_start()
668 struct iwl_mvm *mvm = ctx; in iwl_mvm_fwrt_dump_end() local
670 mutex_unlock(&mvm->mutex); in iwl_mvm_fwrt_dump_end()
680 struct iwl_mvm *mvm = (struct iwl_mvm *)ctx; in iwl_mvm_fwrt_send_hcmd() local
683 mutex_lock(&mvm->mutex); in iwl_mvm_fwrt_send_hcmd()
684 ret = iwl_mvm_send_cmd(mvm, host_cmd); in iwl_mvm_fwrt_send_hcmd()
685 mutex_unlock(&mvm->mutex); in iwl_mvm_fwrt_send_hcmd()
703 static int iwl_mvm_start_get_nvm(struct iwl_mvm *mvm) in iwl_mvm_start_get_nvm() argument
705 struct iwl_trans *trans = mvm->trans; in iwl_mvm_start_get_nvm()
709 if (WARN(!mvm->mei_registered, in iwl_mvm_start_get_nvm()
713 mvm->mei_nvm_data = iwl_mei_get_nvm(); in iwl_mvm_start_get_nvm()
714 if (mvm->mei_nvm_data) { in iwl_mvm_start_get_nvm()
720 mvm->nvm_data = in iwl_mvm_start_get_nvm()
722 mvm->mei_nvm_data, mvm->fw); in iwl_mvm_start_get_nvm()
726 IWL_ERR(mvm, in iwl_mvm_start_get_nvm()
732 wiphy_lock(mvm->hw->wiphy); in iwl_mvm_start_get_nvm()
733 mutex_lock(&mvm->mutex); in iwl_mvm_start_get_nvm()
735 ret = iwl_trans_start_hw(mvm->trans); in iwl_mvm_start_get_nvm()
737 mutex_unlock(&mvm->mutex); in iwl_mvm_start_get_nvm()
738 wiphy_unlock(mvm->hw->wiphy); in iwl_mvm_start_get_nvm()
743 ret = iwl_run_init_mvm_ucode(mvm); in iwl_mvm_start_get_nvm()
745 iwl_fw_dbg_error_collect(&mvm->fwrt, FW_DBG_TRIGGER_DRIVER); in iwl_mvm_start_get_nvm()
746 if (!ret && iwl_mvm_is_lar_supported(mvm)) { in iwl_mvm_start_get_nvm()
747 mvm->hw->wiphy->regulatory_flags |= REGULATORY_WIPHY_SELF_MANAGED; in iwl_mvm_start_get_nvm()
748 ret = iwl_mvm_init_mcc(mvm); in iwl_mvm_start_get_nvm()
752 iwl_mvm_stop_device(mvm); in iwl_mvm_start_get_nvm()
754 mutex_unlock(&mvm->mutex); in iwl_mvm_start_get_nvm()
755 wiphy_unlock(mvm->hw->wiphy); in iwl_mvm_start_get_nvm()
759 IWL_ERR(mvm, "Failed to run INIT ucode: %d\n", ret); in iwl_mvm_start_get_nvm()
764 static int iwl_mvm_start_post_nvm(struct iwl_mvm *mvm) in iwl_mvm_start_post_nvm() argument
769 iwl_mvm_toggle_tx_ant(mvm, &mvm->mgmt_last_antenna_idx); in iwl_mvm_start_post_nvm()
771 ret = iwl_mvm_mac_setup_register(mvm); in iwl_mvm_start_post_nvm()
775 mvm->hw_registered = true; in iwl_mvm_start_post_nvm()
777 iwl_mvm_dbgfs_register(mvm); in iwl_mvm_start_post_nvm()
779 wiphy_rfkill_set_hw_state_reason(mvm->hw->wiphy, in iwl_mvm_start_post_nvm()
780 mvm->mei_rfkill_blocked, in iwl_mvm_start_post_nvm()
783 iwl_mvm_mei_set_sw_rfkill_state(mvm); in iwl_mvm_start_post_nvm()
859 struct iwl_mvm *mvm = ctx; in iwl_mvm_frob_txf() local
862 if (iwl_mvm_has_new_tx_api(mvm)) in iwl_mvm_frob_txf()
866 ieee80211_iter_keys_rcu(mvm->hw, NULL, iwl_mvm_frob_txf_key_iter, &txf); in iwl_mvm_frob_txf()
917 struct iwl_mvm *mvm = ctx; in iwl_mvm_frob_mem() local
920 switch (mvm->fwrt.cur_fw_img) { in iwl_mvm_frob_mem()
927 excl = mvm->fw->dump_excl; in iwl_mvm_frob_mem()
930 excl = mvm->fw->dump_excl_wowlan; in iwl_mvm_frob_mem()
934 BUILD_BUG_ON(sizeof(mvm->fw->dump_excl) != in iwl_mvm_frob_mem()
935 sizeof(mvm->fw->dump_excl_wowlan)); in iwl_mvm_frob_mem()
937 for (i = 0; i < ARRAY_SIZE(mvm->fw->dump_excl); i++) { in iwl_mvm_frob_mem()
967 struct iwl_mvm *mvm = priv; in iwl_mvm_me_conn_status() local
974 prev_conn_info = rcu_dereference_protected(mvm->csme_conn_info, true); in iwl_mvm_me_conn_status()
982 rcu_assign_pointer(mvm->csme_conn_info, curr_conn_info); in iwl_mvm_me_conn_status()
990 struct iwl_mvm *mvm = priv; in iwl_mvm_mei_rfkill() local
992 mvm->mei_rfkill_blocked = blocked; in iwl_mvm_mei_rfkill()
993 if (!mvm->hw_registered) in iwl_mvm_mei_rfkill()
996 wiphy_rfkill_set_hw_state_reason(mvm->hw->wiphy, in iwl_mvm_mei_rfkill()
997 mvm->mei_rfkill_blocked, in iwl_mvm_mei_rfkill()
1003 struct iwl_mvm *mvm = priv; in iwl_mvm_mei_roaming_forbidden() local
1005 if (!mvm->hw_registered || !mvm->csme_vif) in iwl_mvm_mei_roaming_forbidden()
1008 iwl_mvm_send_roaming_forbidden_event(mvm, mvm->csme_vif, forbidden); in iwl_mvm_mei_roaming_forbidden()
1013 struct iwl_mvm *mvm = in iwl_mvm_sap_connected_wk() local
1017 ret = iwl_mvm_start_get_nvm(mvm); in iwl_mvm_sap_connected_wk()
1021 ret = iwl_mvm_start_post_nvm(mvm); in iwl_mvm_sap_connected_wk()
1028 IWL_ERR(mvm, "Couldn't get started...\n"); in iwl_mvm_sap_connected_wk()
1031 iwl_fw_flush_dumps(&mvm->fwrt); in iwl_mvm_sap_connected_wk()
1032 iwl_mvm_thermal_exit(mvm); in iwl_mvm_sap_connected_wk()
1033 iwl_fw_runtime_free(&mvm->fwrt); in iwl_mvm_sap_connected_wk()
1034 iwl_phy_db_free(mvm->phy_db); in iwl_mvm_sap_connected_wk()
1035 kfree(mvm->scan_cmd); in iwl_mvm_sap_connected_wk()
1036 iwl_trans_op_mode_leave(mvm->trans); in iwl_mvm_sap_connected_wk()
1037 kfree(mvm->nvm_data); in iwl_mvm_sap_connected_wk()
1038 kfree(mvm->mei_nvm_data); in iwl_mvm_sap_connected_wk()
1040 ieee80211_free_hw(mvm->hw); in iwl_mvm_sap_connected_wk()
1045 struct iwl_mvm *mvm = priv; in iwl_mvm_mei_sap_connected() local
1047 if (!mvm->hw_registered) in iwl_mvm_mei_sap_connected()
1048 schedule_work(&mvm->sap_connected_wk); in iwl_mvm_mei_sap_connected()
1053 struct iwl_mvm *mvm = priv; in iwl_mvm_mei_nic_stolen() local
1056 cfg80211_shutdown_all_interfaces(mvm->hw->wiphy); in iwl_mvm_mei_nic_stolen()
1074 struct iwl_mvm *mvm; in iwl_op_mode_mvm_start() local
1088 BUILD_BUG_ON(ARRAY_SIZE(mvm->fw_id_to_mac_id) != in iwl_op_mode_mvm_start()
1109 mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_op_mode_mvm_start()
1110 mvm->dev = trans->dev; in iwl_op_mode_mvm_start()
1111 mvm->trans = trans; in iwl_op_mode_mvm_start()
1112 mvm->cfg = cfg; in iwl_op_mode_mvm_start()
1113 mvm->fw = fw; in iwl_op_mode_mvm_start()
1114 mvm->hw = hw; in iwl_op_mode_mvm_start()
1116 iwl_fw_runtime_init(&mvm->fwrt, trans, fw, &iwl_mvm_fwrt_ops, mvm, in iwl_op_mode_mvm_start()
1117 &iwl_mvm_sanitize_ops, mvm, dbgfs_dir); in iwl_op_mode_mvm_start()
1119 iwl_mvm_get_acpi_tables(mvm); in iwl_op_mode_mvm_start()
1120 iwl_uefi_get_sgom_table(trans, &mvm->fwrt); in iwl_op_mode_mvm_start()
1122 mvm->init_status = 0; in iwl_op_mode_mvm_start()
1124 if (iwl_mvm_has_new_rx_api(mvm)) { in iwl_op_mode_mvm_start()
1140 mvm->fw_restart = iwlwifi_mod_params.fw_restart ? -1 : 0; in iwl_op_mode_mvm_start()
1142 if (iwl_mvm_has_new_tx_api(mvm)) { in iwl_op_mode_mvm_start()
1152 mvm->aux_queue = IWL_MVM_INVALID_QUEUE; in iwl_op_mode_mvm_start()
1153 mvm->snif_queue = IWL_MVM_INVALID_QUEUE; in iwl_op_mode_mvm_start()
1154 mvm->probe_queue = IWL_MVM_INVALID_QUEUE; in iwl_op_mode_mvm_start()
1155 mvm->p2p_dev_queue = IWL_MVM_INVALID_QUEUE; in iwl_op_mode_mvm_start()
1157 mvm->aux_queue = IWL_MVM_DQA_AUX_QUEUE; in iwl_op_mode_mvm_start()
1158 mvm->snif_queue = IWL_MVM_DQA_INJECT_MONITOR_QUEUE; in iwl_op_mode_mvm_start()
1159 mvm->probe_queue = IWL_MVM_DQA_AP_PROBE_RESP_QUEUE; in iwl_op_mode_mvm_start()
1160 mvm->p2p_dev_queue = IWL_MVM_DQA_P2P_DEVICE_QUEUE; in iwl_op_mode_mvm_start()
1163 mvm->sf_state = SF_UNINIT; in iwl_op_mode_mvm_start()
1164 if (iwl_mvm_has_unified_ucode(mvm)) in iwl_op_mode_mvm_start()
1165 iwl_fw_set_current_image(&mvm->fwrt, IWL_UCODE_REGULAR); in iwl_op_mode_mvm_start()
1167 iwl_fw_set_current_image(&mvm->fwrt, IWL_UCODE_INIT); in iwl_op_mode_mvm_start()
1168 mvm->drop_bcn_ap_mode = true; in iwl_op_mode_mvm_start()
1170 mutex_init(&mvm->mutex); in iwl_op_mode_mvm_start()
1171 spin_lock_init(&mvm->async_handlers_lock); in iwl_op_mode_mvm_start()
1172 INIT_LIST_HEAD(&mvm->time_event_list); in iwl_op_mode_mvm_start()
1173 INIT_LIST_HEAD(&mvm->aux_roc_te_list); in iwl_op_mode_mvm_start()
1174 INIT_LIST_HEAD(&mvm->async_handlers_list); in iwl_op_mode_mvm_start()
1175 spin_lock_init(&mvm->time_event_lock); in iwl_op_mode_mvm_start()
1176 INIT_LIST_HEAD(&mvm->ftm_initiator.loc_list); in iwl_op_mode_mvm_start()
1177 INIT_LIST_HEAD(&mvm->ftm_initiator.pasn_list); in iwl_op_mode_mvm_start()
1178 INIT_LIST_HEAD(&mvm->resp_pasn_list); in iwl_op_mode_mvm_start()
1180 INIT_WORK(&mvm->async_handlers_wk, iwl_mvm_async_handlers_wk); in iwl_op_mode_mvm_start()
1181 INIT_WORK(&mvm->roc_done_wk, iwl_mvm_roc_done_wk); in iwl_op_mode_mvm_start()
1182 INIT_WORK(&mvm->sap_connected_wk, iwl_mvm_sap_connected_wk); in iwl_op_mode_mvm_start()
1183 INIT_DELAYED_WORK(&mvm->tdls_cs.dwork, iwl_mvm_tdls_ch_switch_work); in iwl_op_mode_mvm_start()
1184 INIT_DELAYED_WORK(&mvm->scan_timeout_dwork, iwl_mvm_scan_timeout_wk); in iwl_op_mode_mvm_start()
1185 INIT_WORK(&mvm->add_stream_wk, iwl_mvm_add_new_dqa_stream_wk); in iwl_op_mode_mvm_start()
1186 INIT_LIST_HEAD(&mvm->add_stream_txqs); in iwl_op_mode_mvm_start()
1188 init_waitqueue_head(&mvm->rx_sync_waitq); in iwl_op_mode_mvm_start()
1190 mvm->queue_sync_state = 0; in iwl_op_mode_mvm_start()
1192 SET_IEEE80211_DEV(mvm->hw, mvm->trans->dev); in iwl_op_mode_mvm_start()
1194 spin_lock_init(&mvm->tcm.lock); in iwl_op_mode_mvm_start()
1195 INIT_DELAYED_WORK(&mvm->tcm.work, iwl_mvm_tcm_work); in iwl_op_mode_mvm_start()
1196 mvm->tcm.ts = jiffies; in iwl_op_mode_mvm_start()
1197 mvm->tcm.ll_ts = jiffies; in iwl_op_mode_mvm_start()
1198 mvm->tcm.uapsd_nonagg_ts = jiffies; in iwl_op_mode_mvm_start()
1200 INIT_DELAYED_WORK(&mvm->cs_tx_unblock_dwork, iwl_mvm_tx_unblock_dwork); in iwl_op_mode_mvm_start()
1202 mvm->cmd_ver.range_resp = in iwl_op_mode_mvm_start()
1203 iwl_fw_lookup_notif_ver(mvm->fw, LOCATION_GROUP, in iwl_op_mode_mvm_start()
1206 if (WARN_ON_ONCE(mvm->cmd_ver.range_resp > 9)) in iwl_op_mode_mvm_start()
1238 mvm->trans->trans_cfg->device_family < IWL_DEVICE_FAMILY_AX210; in iwl_op_mode_mvm_start()
1252 iwl_mvm_get_wd_timeout(mvm, NULL, false, true); in iwl_op_mode_mvm_start()
1254 snprintf(mvm->hw->wiphy->fw_version, in iwl_op_mode_mvm_start()
1255 sizeof(mvm->hw->wiphy->fw_version), in iwl_op_mode_mvm_start()
1258 trans_cfg.fw_reset_handshake = fw_has_capa(&mvm->fw->ucode_capa, in iwl_op_mode_mvm_start()
1262 iwl_fw_lookup_cmd_ver(mvm->fw, in iwl_op_mode_mvm_start()
1266 mvm->sta_remove_requires_queue_remove = in iwl_op_mode_mvm_start()
1270 iwl_trans_configure(mvm->trans, &trans_cfg); in iwl_op_mode_mvm_start()
1273 trans->dbg.dest_tlv = mvm->fw->dbg.dest_tlv; in iwl_op_mode_mvm_start()
1274 trans->dbg.n_dest_reg = mvm->fw->dbg.n_dest_reg; in iwl_op_mode_mvm_start()
1275 memcpy(trans->dbg.conf_tlv, mvm->fw->dbg.conf_tlv, in iwl_op_mode_mvm_start()
1277 trans->dbg.trigger_tlv = mvm->fw->dbg.trigger_tlv; in iwl_op_mode_mvm_start()
1279 trans->iml = mvm->fw->iml; in iwl_op_mode_mvm_start()
1280 trans->iml_len = mvm->fw->iml_len; in iwl_op_mode_mvm_start()
1283 iwl_notification_wait_init(&mvm->notif_wait); in iwl_op_mode_mvm_start()
1286 mvm->phy_db = iwl_phy_db_init(trans); in iwl_op_mode_mvm_start()
1287 if (!mvm->phy_db) { in iwl_op_mode_mvm_start()
1288 IWL_ERR(mvm, "Cannot init phy_db\n"); in iwl_op_mode_mvm_start()
1292 IWL_INFO(mvm, "Detected %s, REV=0x%X\n", in iwl_op_mode_mvm_start()
1293 mvm->trans->name, mvm->trans->hw_rev); in iwl_op_mode_mvm_start()
1296 mvm->nvm_file_name = iwlwifi_mod_params.nvm_file; in iwl_op_mode_mvm_start()
1298 IWL_DEBUG_EEPROM(mvm->trans->dev, in iwl_op_mode_mvm_start()
1301 scan_size = iwl_mvm_scan_size(mvm); in iwl_op_mode_mvm_start()
1303 mvm->scan_cmd = kmalloc(scan_size, GFP_KERNEL); in iwl_op_mode_mvm_start()
1304 if (!mvm->scan_cmd) in iwl_op_mode_mvm_start()
1306 mvm->scan_cmd_size = scan_size; in iwl_op_mode_mvm_start()
1309 mvm->aux_sta.sta_id = IWL_MVM_INVALID_STA; in iwl_op_mode_mvm_start()
1310 mvm->snif_sta.sta_id = IWL_MVM_INVALID_STA; in iwl_op_mode_mvm_start()
1313 mvm->last_ebs_successful = true; in iwl_op_mode_mvm_start()
1315 min_backoff = iwl_mvm_min_backoff(mvm); in iwl_op_mode_mvm_start()
1316 iwl_mvm_thermal_initialize(mvm, min_backoff); in iwl_op_mode_mvm_start()
1318 if (!iwl_mvm_has_new_rx_stats_api(mvm)) in iwl_op_mode_mvm_start()
1319 memset(&mvm->rx_stats_v3, 0, in iwl_op_mode_mvm_start()
1322 memset(&mvm->rx_stats, 0, sizeof(struct mvm_statistics_rx)); in iwl_op_mode_mvm_start()
1324 mvm->debugfs_dir = dbgfs_dir; in iwl_op_mode_mvm_start()
1326 mvm->mei_registered = !iwl_mei_register(mvm, &mei_ops); in iwl_op_mode_mvm_start()
1328 if (iwl_mvm_start_get_nvm(mvm)) { in iwl_op_mode_mvm_start()
1334 if (trans->csme_own && mvm->mei_registered) in iwl_op_mode_mvm_start()
1341 if (iwl_mvm_start_post_nvm(mvm)) in iwl_op_mode_mvm_start()
1347 iwl_mvm_thermal_exit(mvm); in iwl_op_mode_mvm_start()
1348 if (mvm->mei_registered) { in iwl_op_mode_mvm_start()
1353 iwl_fw_flush_dumps(&mvm->fwrt); in iwl_op_mode_mvm_start()
1354 iwl_fw_runtime_free(&mvm->fwrt); in iwl_op_mode_mvm_start()
1358 iwl_phy_db_free(mvm->phy_db); in iwl_op_mode_mvm_start()
1359 kfree(mvm->scan_cmd); in iwl_op_mode_mvm_start()
1362 ieee80211_free_hw(mvm->hw); in iwl_op_mode_mvm_start()
1366 void iwl_mvm_stop_device(struct iwl_mvm *mvm) in iwl_mvm_stop_device() argument
1368 lockdep_assert_held(&mvm->mutex); in iwl_mvm_stop_device()
1370 iwl_fw_cancel_timestamp(&mvm->fwrt); in iwl_mvm_stop_device()
1372 clear_bit(IWL_MVM_STATUS_FIRMWARE_RUNNING, &mvm->status); in iwl_mvm_stop_device()
1374 iwl_fw_dbg_stop_sync(&mvm->fwrt); in iwl_mvm_stop_device()
1375 iwl_trans_stop_device(mvm->trans); in iwl_mvm_stop_device()
1376 iwl_free_fw_paging(&mvm->fwrt); in iwl_mvm_stop_device()
1377 iwl_fw_dump_conf_clear(&mvm->fwrt); in iwl_mvm_stop_device()
1378 iwl_mvm_mei_device_state(mvm, false); in iwl_mvm_stop_device()
1383 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_op_mode_mvm_stop() local
1386 if (mvm->mei_registered) { in iwl_op_mode_mvm_stop()
1397 cancel_work_sync(&mvm->sap_connected_wk); in iwl_op_mode_mvm_stop()
1399 iwl_mvm_leds_exit(mvm); in iwl_op_mode_mvm_stop()
1401 iwl_mvm_thermal_exit(mvm); in iwl_op_mode_mvm_stop()
1411 if (mvm->hw_registered) in iwl_op_mode_mvm_stop()
1412 ieee80211_unregister_hw(mvm->hw); in iwl_op_mode_mvm_stop()
1414 kfree(mvm->scan_cmd); in iwl_op_mode_mvm_stop()
1415 kfree(mvm->mcast_filter_cmd); in iwl_op_mode_mvm_stop()
1416 mvm->mcast_filter_cmd = NULL; in iwl_op_mode_mvm_stop()
1418 kfree(mvm->error_recovery_buf); in iwl_op_mode_mvm_stop()
1419 mvm->error_recovery_buf = NULL; in iwl_op_mode_mvm_stop()
1421 iwl_trans_op_mode_leave(mvm->trans); in iwl_op_mode_mvm_stop()
1423 iwl_phy_db_free(mvm->phy_db); in iwl_op_mode_mvm_stop()
1424 mvm->phy_db = NULL; in iwl_op_mode_mvm_stop()
1426 kfree(mvm->nvm_data); in iwl_op_mode_mvm_stop()
1427 kfree(mvm->mei_nvm_data); in iwl_op_mode_mvm_stop()
1428 kfree(rcu_access_pointer(mvm->csme_conn_info)); in iwl_op_mode_mvm_stop()
1429 kfree(mvm->temp_nvm_data); in iwl_op_mode_mvm_stop()
1431 kfree(mvm->nvm_sections[i].data); in iwl_op_mode_mvm_stop()
1433 cancel_delayed_work_sync(&mvm->tcm.work); in iwl_op_mode_mvm_stop()
1435 iwl_fw_runtime_free(&mvm->fwrt); in iwl_op_mode_mvm_stop()
1436 mutex_destroy(&mvm->mutex); in iwl_op_mode_mvm_stop()
1438 if (mvm->mei_registered) in iwl_op_mode_mvm_stop()
1441 ieee80211_free_hw(mvm->hw); in iwl_op_mode_mvm_stop()
1448 void (*fn)(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb);
1451 void iwl_mvm_async_handlers_purge(struct iwl_mvm *mvm) in iwl_mvm_async_handlers_purge() argument
1455 spin_lock_bh(&mvm->async_handlers_lock); in iwl_mvm_async_handlers_purge()
1456 list_for_each_entry_safe(entry, tmp, &mvm->async_handlers_list, list) { in iwl_mvm_async_handlers_purge()
1461 spin_unlock_bh(&mvm->async_handlers_lock); in iwl_mvm_async_handlers_purge()
1466 struct iwl_mvm *mvm = in iwl_mvm_async_handlers_wk() local
1477 spin_lock_bh(&mvm->async_handlers_lock); in iwl_mvm_async_handlers_wk()
1478 list_splice_init(&mvm->async_handlers_list, &local_list); in iwl_mvm_async_handlers_wk()
1479 spin_unlock_bh(&mvm->async_handlers_lock); in iwl_mvm_async_handlers_wk()
1483 mutex_lock(&mvm->mutex); in iwl_mvm_async_handlers_wk()
1484 entry->fn(mvm, &entry->rxb); in iwl_mvm_async_handlers_wk()
1488 mutex_unlock(&mvm->mutex); in iwl_mvm_async_handlers_wk()
1493 static inline void iwl_mvm_rx_check_trigger(struct iwl_mvm *mvm, in iwl_mvm_rx_check_trigger() argument
1500 trig = iwl_fw_dbg_trigger_on(&mvm->fwrt, NULL, in iwl_mvm_rx_check_trigger()
1516 iwl_fw_dbg_collect_trig(&mvm->fwrt, trig, in iwl_mvm_rx_check_trigger()
1523 static void iwl_mvm_rx_common(struct iwl_mvm *mvm, in iwl_mvm_rx_common() argument
1531 iwl_dbg_tlv_time_point(&mvm->fwrt, in iwl_mvm_rx_common()
1533 iwl_mvm_rx_check_trigger(mvm, pkt); in iwl_mvm_rx_common()
1540 iwl_notification_wait_notify(&mvm->notif_wait, pkt); in iwl_mvm_rx_common()
1553 rx_h->fn(mvm, rxb); in iwl_mvm_rx_common()
1567 spin_lock(&mvm->async_handlers_lock); in iwl_mvm_rx_common()
1568 list_add_tail(&entry->list, &mvm->async_handlers_list); in iwl_mvm_rx_common()
1569 spin_unlock(&mvm->async_handlers_lock); in iwl_mvm_rx_common()
1570 schedule_work(&mvm->async_handlers_wk); in iwl_mvm_rx_common()
1580 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_rx() local
1584 iwl_mvm_rx_rx_mpdu(mvm, napi, rxb); in iwl_mvm_rx()
1586 iwl_mvm_rx_rx_phy_cmd(mvm, rxb); in iwl_mvm_rx()
1588 iwl_mvm_rx_common(mvm, rxb, pkt); in iwl_mvm_rx()
1596 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_rx_mq() local
1600 iwl_mvm_rx_mpdu_mq(mvm, napi, rxb, 0); in iwl_mvm_rx_mq()
1603 iwl_mvm_rx_queue_notif(mvm, napi, rxb, 0); in iwl_mvm_rx_mq()
1605 iwl_mvm_rx_frame_release(mvm, napi, rxb, 0); in iwl_mvm_rx_mq()
1607 iwl_mvm_rx_bar_frame_release(mvm, napi, rxb, 0); in iwl_mvm_rx_mq()
1609 iwl_mvm_rx_monitor_no_data(mvm, napi, rxb, 0); in iwl_mvm_rx_mq()
1611 iwl_mvm_rx_common(mvm, rxb, pkt); in iwl_mvm_rx_mq()
1617 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_async_cb() local
1623 iwl_trans_block_txq_ptrs(mvm->trans, false); in iwl_mvm_async_cb()
1626 static int iwl_mvm_is_static_queue(struct iwl_mvm *mvm, int queue) in iwl_mvm_is_static_queue() argument
1628 return queue == mvm->aux_queue || queue == mvm->probe_queue || in iwl_mvm_is_static_queue()
1629 queue == mvm->p2p_dev_queue || queue == mvm->snif_queue; in iwl_mvm_is_static_queue()
1635 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_queue_state_change() local
1644 sta_id = iwl_mvm_has_new_tx_api(mvm) ? in iwl_mvm_queue_state_change()
1645 mvm->tvqm_info[hw_queue].sta_id : in iwl_mvm_queue_state_change()
1646 mvm->queue_info[hw_queue].ra_sta_id; in iwl_mvm_queue_state_change()
1648 if (WARN_ON_ONCE(sta_id >= mvm->fw->ucode_capa.num_stations)) in iwl_mvm_queue_state_change()
1653 sta = rcu_dereference(mvm->fw_id_to_mac_id[sta_id]); in iwl_mvm_queue_state_change()
1658 if (iwl_mvm_is_static_queue(mvm, hw_queue)) { in iwl_mvm_queue_state_change()
1660 ieee80211_stop_queues(mvm->hw); in iwl_mvm_queue_state_change()
1662 ieee80211_wake_queues(mvm->hw); in iwl_mvm_queue_state_change()
1667 if (iwl_mvm_has_new_tx_api(mvm)) { in iwl_mvm_queue_state_change()
1668 int tid = mvm->tvqm_info[hw_queue].txq_tid; in iwl_mvm_queue_state_change()
1672 tid_bitmap = mvm->queue_info[hw_queue].tid_bitmap; in iwl_mvm_queue_state_change()
1686 iwl_mvm_mac_itxq_xmit(mvm->hw, txq); in iwl_mvm_queue_state_change()
1703 static void iwl_mvm_set_rfkill_state(struct iwl_mvm *mvm) in iwl_mvm_set_rfkill_state() argument
1705 bool state = iwl_mvm_is_radio_killed(mvm); in iwl_mvm_set_rfkill_state()
1708 wake_up(&mvm->rx_sync_waitq); in iwl_mvm_set_rfkill_state()
1710 wiphy_rfkill_set_hw_state(mvm->hw->wiphy, state); in iwl_mvm_set_rfkill_state()
1713 void iwl_mvm_set_hw_ctkill_state(struct iwl_mvm *mvm, bool state) in iwl_mvm_set_hw_ctkill_state() argument
1716 set_bit(IWL_MVM_STATUS_HW_CTKILL, &mvm->status); in iwl_mvm_set_hw_ctkill_state()
1718 clear_bit(IWL_MVM_STATUS_HW_CTKILL, &mvm->status); in iwl_mvm_set_hw_ctkill_state()
1720 iwl_mvm_set_rfkill_state(mvm); in iwl_mvm_set_hw_ctkill_state()
1723 struct iwl_mvm_csme_conn_info *iwl_mvm_get_csme_conn_info(struct iwl_mvm *mvm) in iwl_mvm_get_csme_conn_info() argument
1725 return rcu_dereference_protected(mvm->csme_conn_info, in iwl_mvm_get_csme_conn_info()
1726 lockdep_is_held(&mvm->mutex)); in iwl_mvm_get_csme_conn_info()
1731 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_set_hw_rfkill_state() local
1732 bool rfkill_safe_init_done = READ_ONCE(mvm->rfkill_safe_init_done); in iwl_mvm_set_hw_rfkill_state()
1733 bool unified = iwl_mvm_has_unified_ucode(mvm); in iwl_mvm_set_hw_rfkill_state()
1736 set_bit(IWL_MVM_STATUS_HW_RFKILL, &mvm->status); in iwl_mvm_set_hw_rfkill_state()
1738 clear_bit(IWL_MVM_STATUS_HW_RFKILL, &mvm->status); in iwl_mvm_set_hw_rfkill_state()
1740 iwl_mvm_set_rfkill_state(mvm); in iwl_mvm_set_hw_rfkill_state()
1744 iwl_abort_notification_waits(&mvm->notif_wait); in iwl_mvm_set_hw_rfkill_state()
1762 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_free_skb() local
1766 iwl_trans_free_tx_cmd(mvm->trans, info->driver_data[1]); in iwl_mvm_free_skb()
1767 ieee80211_free_txskb(mvm->hw, skb); in iwl_mvm_free_skb()
1787 void iwl_mvm_nic_restart(struct iwl_mvm *mvm, bool fw_error) in iwl_mvm_nic_restart() argument
1789 iwl_abort_notification_waits(&mvm->notif_wait); in iwl_mvm_nic_restart()
1790 iwl_dbg_tlv_del_timers(mvm->trans); in iwl_mvm_nic_restart()
1802 iwl_mvm_report_scan_aborted(mvm); in iwl_mvm_nic_restart()
1810 if (!mvm->fw_restart && fw_error) { in iwl_mvm_nic_restart()
1811 iwl_fw_error_collect(&mvm->fwrt, false); in iwl_mvm_nic_restart()
1813 &mvm->status)) { in iwl_mvm_nic_restart()
1814 IWL_ERR(mvm, "Starting mac, retry will be triggered anyway\n"); in iwl_mvm_nic_restart()
1815 } else if (test_bit(IWL_MVM_STATUS_IN_HW_RESTART, &mvm->status)) { in iwl_mvm_nic_restart()
1818 IWL_ERR(mvm, in iwl_mvm_nic_restart()
1827 IWL_ERR(mvm, "Module is being unloaded - abort\n"); in iwl_mvm_nic_restart()
1836 reprobe->dev = get_device(mvm->trans->dev); in iwl_mvm_nic_restart()
1840 &mvm->status)) { in iwl_mvm_nic_restart()
1841 IWL_ERR(mvm, "HW restart already requested, but not started\n"); in iwl_mvm_nic_restart()
1842 } else if (mvm->fwrt.cur_fw_img == IWL_UCODE_REGULAR && in iwl_mvm_nic_restart()
1843 mvm->hw_registered && in iwl_mvm_nic_restart()
1844 !test_bit(STATUS_TRANS_DEAD, &mvm->trans->status)) { in iwl_mvm_nic_restart()
1849 set_bit(IWL_MVM_STATUS_HW_RESTART_REQUESTED, &mvm->status); in iwl_mvm_nic_restart()
1851 if (mvm->fw->ucode_capa.error_log_size) { in iwl_mvm_nic_restart()
1852 u32 src_size = mvm->fw->ucode_capa.error_log_size; in iwl_mvm_nic_restart()
1853 u32 src_addr = mvm->fw->ucode_capa.error_log_addr; in iwl_mvm_nic_restart()
1857 mvm->error_recovery_buf = recover_buf; in iwl_mvm_nic_restart()
1858 iwl_trans_read_mem_bytes(mvm->trans, in iwl_mvm_nic_restart()
1865 iwl_fw_error_collect(&mvm->fwrt, false); in iwl_mvm_nic_restart()
1867 if (fw_error && mvm->fw_restart > 0) { in iwl_mvm_nic_restart()
1868 mvm->fw_restart--; in iwl_mvm_nic_restart()
1869 ieee80211_restart_hw(mvm->hw); in iwl_mvm_nic_restart()
1870 } else if (mvm->fwrt.trans->dbg.restart_required) { in iwl_mvm_nic_restart()
1871 IWL_DEBUG_INFO(mvm, "FW restart requested after debug collection\n"); in iwl_mvm_nic_restart()
1872 mvm->fwrt.trans->dbg.restart_required = FALSE; in iwl_mvm_nic_restart()
1873 ieee80211_restart_hw(mvm->hw); in iwl_mvm_nic_restart()
1874 } else if (mvm->trans->trans_cfg->device_family <= IWL_DEVICE_FAMILY_8000) { in iwl_mvm_nic_restart()
1875 ieee80211_restart_hw(mvm->hw); in iwl_mvm_nic_restart()
1882 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_nic_error() local
1884 if (!test_bit(STATUS_TRANS_DEAD, &mvm->trans->status) && in iwl_mvm_nic_error()
1886 &mvm->status)) in iwl_mvm_nic_error()
1887 iwl_mvm_dump_nic_error_log(mvm); in iwl_mvm_nic_error()
1890 iwl_fw_error_collect(&mvm->fwrt, true); in iwl_mvm_nic_error()
1904 if (!test_bit(IWL_MVM_STATUS_FIRMWARE_RUNNING, &mvm->status)) in iwl_mvm_nic_error()
1907 iwl_mvm_nic_restart(mvm, false); in iwl_mvm_nic_error()
1912 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_cmd_queue_full() local
1915 iwl_mvm_nic_restart(mvm, true); in iwl_mvm_cmd_queue_full()
1922 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_op_mode_mvm_time_point() local
1924 iwl_dbg_tlv_time_point(&mvm->fwrt, tp_id, tp_data); in iwl_op_mode_mvm_time_point()
1952 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_rx_mq_rss() local
1956 if (unlikely(queue >= mvm->trans->num_rx_queues)) in iwl_mvm_rx_mq_rss()
1960 iwl_mvm_rx_frame_release(mvm, napi, rxb, queue); in iwl_mvm_rx_mq_rss()
1963 iwl_mvm_rx_queue_notif(mvm, napi, rxb, queue); in iwl_mvm_rx_mq_rss()
1965 iwl_mvm_rx_mpdu_mq(mvm, napi, rxb, queue); in iwl_mvm_rx_mq_rss()