Lines Matching refs:mvm

143 	struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode);  in iwl_mvm_nic_config()  local
146 u32 phy_config = iwl_mvm_get_phy_config(mvm); in iwl_mvm_nic_config()
156 reg_val |= CSR_HW_REV_STEP(mvm->trans->hw_rev) << in iwl_mvm_nic_config()
158 reg_val |= CSR_HW_REV_DASH(mvm->trans->hw_rev) << in iwl_mvm_nic_config()
176 if (mvm->trans->cfg->device_family != IWL_DEVICE_FAMILY_8000) in iwl_mvm_nic_config()
179 iwl_trans_set_bits_mask(mvm->trans, CSR_HW_IF_CONFIG_REG, in iwl_mvm_nic_config()
189 IWL_DEBUG_INFO(mvm, "Radio type=0x%x-0x%x-0x%x\n", radio_cfg_type, in iwl_mvm_nic_config()
197 if (mvm->trans->cfg->device_family != IWL_DEVICE_FAMILY_8000) in iwl_mvm_nic_config()
198 iwl_set_bits_mask_prph(mvm->trans, APMG_PS_CTRL_REG, in iwl_mvm_nic_config()
206 int (*fn)(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb,
394 struct iwl_mvm *mvm; in iwl_op_mode_mvm_start() local
407 BUILD_BUG_ON(ARRAY_SIZE(mvm->fw_id_to_mac_id) != IWL_MVM_STATION_COUNT); in iwl_op_mode_mvm_start()
427 mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_op_mode_mvm_start()
428 mvm->dev = trans->dev; in iwl_op_mode_mvm_start()
429 mvm->trans = trans; in iwl_op_mode_mvm_start()
430 mvm->cfg = cfg; in iwl_op_mode_mvm_start()
431 mvm->fw = fw; in iwl_op_mode_mvm_start()
432 mvm->hw = hw; in iwl_op_mode_mvm_start()
434 mvm->restart_fw = iwlwifi_mod_params.restart_fw ? -1 : 0; in iwl_op_mode_mvm_start()
436 mvm->aux_queue = 15; in iwl_op_mode_mvm_start()
437 mvm->first_agg_queue = 16; in iwl_op_mode_mvm_start()
438 mvm->last_agg_queue = mvm->cfg->base_params->num_of_queues - 1; in iwl_op_mode_mvm_start()
439 if (mvm->cfg->base_params->num_of_queues == 16) { in iwl_op_mode_mvm_start()
440 mvm->aux_queue = 11; in iwl_op_mode_mvm_start()
441 mvm->first_agg_queue = 12; in iwl_op_mode_mvm_start()
443 mvm->sf_state = SF_UNINIT; in iwl_op_mode_mvm_start()
444 mvm->low_latency_agg_frame_limit = 6; in iwl_op_mode_mvm_start()
445 mvm->cur_ucode = IWL_UCODE_INIT; in iwl_op_mode_mvm_start()
447 mutex_init(&mvm->mutex); in iwl_op_mode_mvm_start()
448 mutex_init(&mvm->d0i3_suspend_mutex); in iwl_op_mode_mvm_start()
449 spin_lock_init(&mvm->async_handlers_lock); in iwl_op_mode_mvm_start()
450 INIT_LIST_HEAD(&mvm->time_event_list); in iwl_op_mode_mvm_start()
451 INIT_LIST_HEAD(&mvm->aux_roc_te_list); in iwl_op_mode_mvm_start()
452 INIT_LIST_HEAD(&mvm->async_handlers_list); in iwl_op_mode_mvm_start()
453 spin_lock_init(&mvm->time_event_lock); in iwl_op_mode_mvm_start()
455 INIT_WORK(&mvm->async_handlers_wk, iwl_mvm_async_handlers_wk); in iwl_op_mode_mvm_start()
456 INIT_WORK(&mvm->roc_done_wk, iwl_mvm_roc_done_wk); in iwl_op_mode_mvm_start()
457 INIT_WORK(&mvm->sta_drained_wk, iwl_mvm_sta_drained_wk); in iwl_op_mode_mvm_start()
458 INIT_WORK(&mvm->d0i3_exit_work, iwl_mvm_d0i3_exit_work); in iwl_op_mode_mvm_start()
459 INIT_DELAYED_WORK(&mvm->fw_dump_wk, iwl_mvm_fw_error_dump_wk); in iwl_op_mode_mvm_start()
460 INIT_DELAYED_WORK(&mvm->tdls_cs.dwork, iwl_mvm_tdls_ch_switch_work); in iwl_op_mode_mvm_start()
462 spin_lock_init(&mvm->d0i3_tx_lock); in iwl_op_mode_mvm_start()
463 spin_lock_init(&mvm->refs_lock); in iwl_op_mode_mvm_start()
464 skb_queue_head_init(&mvm->d0i3_tx); in iwl_op_mode_mvm_start()
465 init_waitqueue_head(&mvm->d0i3_exit_waitq); in iwl_op_mode_mvm_start()
467 SET_IEEE80211_DEV(mvm->hw, mvm->trans->dev); in iwl_op_mode_mvm_start()
478 if (mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_DW_BC_TABLE) in iwl_op_mode_mvm_start()
491 iwl_mvm_get_wd_timeout(mvm, NULL, false, true); in iwl_op_mode_mvm_start()
493 snprintf(mvm->hw->wiphy->fw_version, in iwl_op_mode_mvm_start()
494 sizeof(mvm->hw->wiphy->fw_version), in iwl_op_mode_mvm_start()
498 iwl_trans_configure(mvm->trans, &trans_cfg); in iwl_op_mode_mvm_start()
502 trans->dbg_dest_tlv = mvm->fw->dbg_dest_tlv; in iwl_op_mode_mvm_start()
503 trans->dbg_dest_reg_num = mvm->fw->dbg_dest_reg_num; in iwl_op_mode_mvm_start()
504 memcpy(trans->dbg_conf_tlv, mvm->fw->dbg_conf_tlv, in iwl_op_mode_mvm_start()
506 trans->dbg_trigger_tlv = mvm->fw->dbg_trigger_tlv; in iwl_op_mode_mvm_start()
509 iwl_notification_wait_init(&mvm->notif_wait); in iwl_op_mode_mvm_start()
512 mvm->phy_db = iwl_phy_db_init(trans); in iwl_op_mode_mvm_start()
513 if (!mvm->phy_db) { in iwl_op_mode_mvm_start()
514 IWL_ERR(mvm, "Cannot init phy_db\n"); in iwl_op_mode_mvm_start()
518 IWL_INFO(mvm, "Detected %s, REV=0x%X\n", in iwl_op_mode_mvm_start()
519 mvm->cfg->name, mvm->trans->hw_rev); in iwl_op_mode_mvm_start()
522 iwl_mvm_tt_initialize(mvm, min_backoff); in iwl_op_mode_mvm_start()
525 mvm->nvm_file_name = iwlwifi_mod_params.nvm_file; in iwl_op_mode_mvm_start()
528 mvm->nvm_file_name = mvm->cfg->default_nvm_file_B_step; in iwl_op_mode_mvm_start()
530 mvm->nvm_file_name = mvm->cfg->default_nvm_file_C_step; in iwl_op_mode_mvm_start()
533 if (WARN(cfg->no_power_up_nic_in_init && !mvm->nvm_file_name, in iwl_op_mode_mvm_start()
543 if (cfg->no_power_up_nic_in_init && mvm->nvm_file_name) { in iwl_op_mode_mvm_start()
544 err = iwl_nvm_init(mvm, false); in iwl_op_mode_mvm_start()
548 err = iwl_trans_start_hw(mvm->trans); in iwl_op_mode_mvm_start()
552 mutex_lock(&mvm->mutex); in iwl_op_mode_mvm_start()
553 err = iwl_run_init_mvm_ucode(mvm, true); in iwl_op_mode_mvm_start()
556 mutex_unlock(&mvm->mutex); in iwl_op_mode_mvm_start()
559 IWL_ERR(mvm, "Failed to run INIT ucode: %d\n", err); in iwl_op_mode_mvm_start()
564 scan_size = iwl_mvm_scan_size(mvm); in iwl_op_mode_mvm_start()
566 mvm->scan_cmd = kmalloc(scan_size, GFP_KERNEL); in iwl_op_mode_mvm_start()
567 if (!mvm->scan_cmd) in iwl_op_mode_mvm_start()
571 mvm->last_ebs_successful = true; in iwl_op_mode_mvm_start()
573 err = iwl_mvm_mac_setup_register(mvm); in iwl_op_mode_mvm_start()
577 err = iwl_mvm_dbgfs_register(mvm, dbgfs_dir); in iwl_op_mode_mvm_start()
581 memset(&mvm->rx_stats, 0, sizeof(struct mvm_statistics_rx)); in iwl_op_mode_mvm_start()
584 mvm->refs[IWL_MVM_REF_UCODE_DOWN] = 1; in iwl_op_mode_mvm_start()
589 ieee80211_unregister_hw(mvm->hw); in iwl_op_mode_mvm_start()
590 iwl_mvm_leds_exit(mvm); in iwl_op_mode_mvm_start()
592 flush_delayed_work(&mvm->fw_dump_wk); in iwl_op_mode_mvm_start()
593 iwl_phy_db_free(mvm->phy_db); in iwl_op_mode_mvm_start()
594 kfree(mvm->scan_cmd); in iwl_op_mode_mvm_start()
595 if (!cfg->no_power_up_nic_in_init || !mvm->nvm_file_name) in iwl_op_mode_mvm_start()
597 ieee80211_free_hw(mvm->hw); in iwl_op_mode_mvm_start()
603 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_op_mode_mvm_stop() local
606 iwl_mvm_leds_exit(mvm); in iwl_op_mode_mvm_stop()
608 iwl_mvm_tt_exit(mvm); in iwl_op_mode_mvm_stop()
610 ieee80211_unregister_hw(mvm->hw); in iwl_op_mode_mvm_stop()
612 kfree(mvm->scan_cmd); in iwl_op_mode_mvm_stop()
613 kfree(mvm->mcast_filter_cmd); in iwl_op_mode_mvm_stop()
614 mvm->mcast_filter_cmd = NULL; in iwl_op_mode_mvm_stop()
617 kfree(mvm->d3_resume_sram); in iwl_op_mode_mvm_stop()
618 if (mvm->nd_config) { in iwl_op_mode_mvm_stop()
619 kfree(mvm->nd_config->match_sets); in iwl_op_mode_mvm_stop()
620 kfree(mvm->nd_config); in iwl_op_mode_mvm_stop()
621 mvm->nd_config = NULL; in iwl_op_mode_mvm_stop()
625 iwl_trans_op_mode_leave(mvm->trans); in iwl_op_mode_mvm_stop()
627 iwl_phy_db_free(mvm->phy_db); in iwl_op_mode_mvm_stop()
628 mvm->phy_db = NULL; in iwl_op_mode_mvm_stop()
630 iwl_free_nvm_data(mvm->nvm_data); in iwl_op_mode_mvm_stop()
632 kfree(mvm->nvm_sections[i].data); in iwl_op_mode_mvm_stop()
634 ieee80211_free_hw(mvm->hw); in iwl_op_mode_mvm_stop()
640 int (*fn)(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb,
644 void iwl_mvm_async_handlers_purge(struct iwl_mvm *mvm) in iwl_mvm_async_handlers_purge() argument
648 spin_lock_bh(&mvm->async_handlers_lock); in iwl_mvm_async_handlers_purge()
649 list_for_each_entry_safe(entry, tmp, &mvm->async_handlers_list, list) { in iwl_mvm_async_handlers_purge()
654 spin_unlock_bh(&mvm->async_handlers_lock); in iwl_mvm_async_handlers_purge()
659 struct iwl_mvm *mvm = in iwl_mvm_async_handlers_wk() local
667 mutex_lock(&mvm->mutex); in iwl_mvm_async_handlers_wk()
673 spin_lock_bh(&mvm->async_handlers_lock); in iwl_mvm_async_handlers_wk()
674 list_splice_init(&mvm->async_handlers_list, &local_list); in iwl_mvm_async_handlers_wk()
675 spin_unlock_bh(&mvm->async_handlers_lock); in iwl_mvm_async_handlers_wk()
678 if (entry->fn(mvm, &entry->rxb, NULL)) in iwl_mvm_async_handlers_wk()
679 IWL_WARN(mvm, in iwl_mvm_async_handlers_wk()
685 mutex_unlock(&mvm->mutex); in iwl_mvm_async_handlers_wk()
688 static inline void iwl_mvm_rx_check_trigger(struct iwl_mvm *mvm, in iwl_mvm_rx_check_trigger() argument
695 if (!iwl_fw_dbg_trigger_enabled(mvm->fw, FW_DBG_TRIGGER_FW_NOTIF)) in iwl_mvm_rx_check_trigger()
698 trig = iwl_fw_dbg_get_trigger(mvm->fw, FW_DBG_TRIGGER_FW_NOTIF); in iwl_mvm_rx_check_trigger()
701 if (!iwl_fw_dbg_trigger_check_stop(mvm, NULL, trig)) in iwl_mvm_rx_check_trigger()
712 iwl_mvm_fw_dbg_collect_trig(mvm, trig, in iwl_mvm_rx_check_trigger()
724 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_rx_dispatch() local
727 iwl_mvm_rx_check_trigger(mvm, pkt); in iwl_mvm_rx_dispatch()
734 iwl_notification_wait_notify(&mvm->notif_wait, pkt); in iwl_mvm_rx_dispatch()
744 return rx_h->fn(mvm, rxb, cmd); in iwl_mvm_rx_dispatch()
755 spin_lock(&mvm->async_handlers_lock); in iwl_mvm_rx_dispatch()
756 list_add_tail(&entry->list, &mvm->async_handlers_list); in iwl_mvm_rx_dispatch()
757 spin_unlock(&mvm->async_handlers_lock); in iwl_mvm_rx_dispatch()
758 schedule_work(&mvm->async_handlers_wk); in iwl_mvm_rx_dispatch()
767 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_stop_sw_queue() local
768 int mq = mvm->queue_to_mac80211[queue]; in iwl_mvm_stop_sw_queue()
773 if (atomic_inc_return(&mvm->mac80211_queue_stop_count[mq]) > 1) { in iwl_mvm_stop_sw_queue()
774 IWL_DEBUG_TX_QUEUES(mvm, in iwl_mvm_stop_sw_queue()
780 ieee80211_stop_queue(mvm->hw, mq); in iwl_mvm_stop_sw_queue()
785 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_wake_sw_queue() local
786 int mq = mvm->queue_to_mac80211[queue]; in iwl_mvm_wake_sw_queue()
791 if (atomic_dec_return(&mvm->mac80211_queue_stop_count[mq]) > 0) { in iwl_mvm_wake_sw_queue()
792 IWL_DEBUG_TX_QUEUES(mvm, in iwl_mvm_wake_sw_queue()
798 ieee80211_wake_queue(mvm->hw, mq); in iwl_mvm_wake_sw_queue()
801 void iwl_mvm_set_hw_ctkill_state(struct iwl_mvm *mvm, bool state) in iwl_mvm_set_hw_ctkill_state() argument
804 set_bit(IWL_MVM_STATUS_HW_CTKILL, &mvm->status); in iwl_mvm_set_hw_ctkill_state()
806 clear_bit(IWL_MVM_STATUS_HW_CTKILL, &mvm->status); in iwl_mvm_set_hw_ctkill_state()
808 wiphy_rfkill_set_hw_state(mvm->hw->wiphy, iwl_mvm_is_radio_killed(mvm)); in iwl_mvm_set_hw_ctkill_state()
813 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_set_hw_rfkill_state() local
814 bool calibrating = ACCESS_ONCE(mvm->calibrating); in iwl_mvm_set_hw_rfkill_state()
817 set_bit(IWL_MVM_STATUS_HW_RFKILL, &mvm->status); in iwl_mvm_set_hw_rfkill_state()
819 clear_bit(IWL_MVM_STATUS_HW_RFKILL, &mvm->status); in iwl_mvm_set_hw_rfkill_state()
821 wiphy_rfkill_set_hw_state(mvm->hw->wiphy, iwl_mvm_is_radio_killed(mvm)); in iwl_mvm_set_hw_rfkill_state()
825 iwl_abort_notification_waits(&mvm->notif_wait); in iwl_mvm_set_hw_rfkill_state()
831 return state && (mvm->cur_ucode != IWL_UCODE_INIT || calibrating); in iwl_mvm_set_hw_rfkill_state()
836 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_free_skb() local
840 iwl_trans_free_tx_cmd(mvm->trans, info->driver_data[1]); in iwl_mvm_free_skb()
841 ieee80211_free_txskb(mvm->hw, skb); in iwl_mvm_free_skb()
862 struct iwl_mvm *mvm = in iwl_mvm_fw_error_dump_wk() local
865 if (iwl_mvm_ref_sync(mvm, IWL_MVM_REF_FW_DBG_COLLECT)) in iwl_mvm_fw_error_dump_wk()
868 mutex_lock(&mvm->mutex); in iwl_mvm_fw_error_dump_wk()
871 if (mvm->cfg->device_family == IWL_DEVICE_FAMILY_7000) { in iwl_mvm_fw_error_dump_wk()
872 iwl_set_bits_prph(mvm->trans, MON_BUFF_SAMPLE_CTL, 0x100); in iwl_mvm_fw_error_dump_wk()
874 iwl_write_prph(mvm->trans, DBGC_IN_SAMPLE, 0); in iwl_mvm_fw_error_dump_wk()
879 iwl_mvm_fw_error_dump(mvm); in iwl_mvm_fw_error_dump_wk()
882 WARN_ON_ONCE((!test_bit(STATUS_FW_ERROR, &mvm->trans->status)) && in iwl_mvm_fw_error_dump_wk()
883 mvm->fw->dbg_dest_tlv && in iwl_mvm_fw_error_dump_wk()
884 iwl_mvm_start_fw_dbg_conf(mvm, mvm->fw_dbg_conf)); in iwl_mvm_fw_error_dump_wk()
886 mutex_unlock(&mvm->mutex); in iwl_mvm_fw_error_dump_wk()
888 iwl_mvm_unref(mvm, IWL_MVM_REF_FW_DBG_COLLECT); in iwl_mvm_fw_error_dump_wk()
891 void iwl_mvm_nic_restart(struct iwl_mvm *mvm, bool fw_error) in iwl_mvm_nic_restart() argument
893 iwl_abort_notification_waits(&mvm->notif_wait); in iwl_mvm_nic_restart()
905 iwl_mvm_report_scan_aborted(mvm); in iwl_mvm_nic_restart()
913 if (!mvm->restart_fw && fw_error) { in iwl_mvm_nic_restart()
914 iwl_mvm_fw_dbg_collect_desc(mvm, &iwl_mvm_dump_desc_assert, 0); in iwl_mvm_nic_restart()
916 &mvm->status)) { in iwl_mvm_nic_restart()
919 IWL_ERR(mvm, in iwl_mvm_nic_restart()
928 IWL_ERR(mvm, "Module is being unloaded - abort\n"); in iwl_mvm_nic_restart()
937 reprobe->dev = mvm->trans->dev; in iwl_mvm_nic_restart()
940 } else if (mvm->cur_ucode == IWL_UCODE_REGULAR) { in iwl_mvm_nic_restart()
942 iwl_mvm_ref(mvm, IWL_MVM_REF_UCODE_DOWN); in iwl_mvm_nic_restart()
944 if (fw_error && mvm->restart_fw > 0) in iwl_mvm_nic_restart()
945 mvm->restart_fw--; in iwl_mvm_nic_restart()
946 ieee80211_restart_hw(mvm->hw); in iwl_mvm_nic_restart()
952 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_nic_error() local
954 iwl_mvm_dump_nic_error_log(mvm); in iwl_mvm_nic_error()
956 iwl_mvm_nic_restart(mvm, true); in iwl_mvm_nic_error()
961 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_cmd_queue_full() local
964 iwl_mvm_nic_restart(mvm, true); in iwl_mvm_cmd_queue_full()
968 struct iwl_mvm *mvm; member
975 static bool iwl_mvm_disallow_offloading(struct iwl_mvm *mvm, in iwl_mvm_disallow_offloading() argument
989 ap_sta = rcu_dereference(mvm->fw_id_to_mac_id[mvmvif->ap_sta_id]); in iwl_mvm_disallow_offloading()
1031 struct iwl_mvm *mvm = data->mvm; in iwl_mvm_enter_d0i3_iterator() local
1035 IWL_DEBUG_RPM(mvm, "entering D0i3 - vif %pM\n", vif->addr); in iwl_mvm_enter_d0i3_iterator()
1045 if (iwl_mvm_disallow_offloading(mvm, vif, data)) in iwl_mvm_enter_d0i3_iterator()
1048 iwl_mvm_update_d0i3_power_mode(mvm, vif, true, flags); in iwl_mvm_enter_d0i3_iterator()
1049 iwl_mvm_send_proto_offload(mvm, vif, data->disable_offloading, flags); in iwl_mvm_enter_d0i3_iterator()
1061 static void iwl_mvm_set_wowlan_data(struct iwl_mvm *mvm, in iwl_mvm_set_wowlan_data() argument
1073 ap_sta = rcu_dereference(mvm->fw_id_to_mac_id[iter_data->ap_sta_id]); in iwl_mvm_set_wowlan_data()
1092 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_enter_d0i3() local
1096 .mvm = mvm, in iwl_mvm_enter_d0i3()
1109 IWL_DEBUG_RPM(mvm, "MVM entering D0i3\n"); in iwl_mvm_enter_d0i3()
1112 set_bit(IWL_MVM_STATUS_IN_D0I3, &mvm->status); in iwl_mvm_enter_d0i3()
1121 if (iwl_mvm_ref_taken(mvm)) { in iwl_mvm_enter_d0i3()
1122 IWL_DEBUG_RPM(mvm->trans, "abort d0i3 due to taken ref\n"); in iwl_mvm_enter_d0i3()
1123 clear_bit(IWL_MVM_STATUS_IN_D0I3, &mvm->status); in iwl_mvm_enter_d0i3()
1124 wake_up(&mvm->d0i3_exit_waitq); in iwl_mvm_enter_d0i3()
1128 ieee80211_iterate_active_interfaces_atomic(mvm->hw, in iwl_mvm_enter_d0i3()
1133 mvm->d0i3_ap_sta_id = d0i3_iter_data.ap_sta_id; in iwl_mvm_enter_d0i3()
1134 mvm->d0i3_offloading = !d0i3_iter_data.disable_offloading; in iwl_mvm_enter_d0i3()
1137 mvm->d0i3_ap_sta_id = IWL_MVM_STATION_COUNT; in iwl_mvm_enter_d0i3()
1138 mvm->d0i3_offloading = false; in iwl_mvm_enter_d0i3()
1141 iwl_mvm_set_wowlan_data(mvm, &wowlan_config_cmd, &d0i3_iter_data); in iwl_mvm_enter_d0i3()
1142 ret = iwl_mvm_send_cmd_pdu(mvm, WOWLAN_CONFIGURATION, flags, in iwl_mvm_enter_d0i3()
1148 return iwl_mvm_send_cmd_pdu(mvm, D3_CONFIG_CMD, in iwl_mvm_enter_d0i3()
1156 struct iwl_mvm *mvm = _data; in iwl_mvm_exit_d0i3_iterator() local
1159 IWL_DEBUG_RPM(mvm, "exiting D0i3 - vif %pM\n", vif->addr); in iwl_mvm_exit_d0i3_iterator()
1164 iwl_mvm_update_d0i3_power_mode(mvm, vif, false, flags); in iwl_mvm_exit_d0i3_iterator()
1170 struct iwl_mvm *mvm = data; in iwl_mvm_d0i3_disconnect_iter() local
1174 mvm->d0i3_ap_sta_id == mvmvif->ap_sta_id) in iwl_mvm_d0i3_disconnect_iter()
1175 iwl_mvm_connection_loss(mvm, vif, "D0i3"); in iwl_mvm_d0i3_disconnect_iter()
1178 void iwl_mvm_d0i3_enable_tx(struct iwl_mvm *mvm, __le16 *qos_seq) in iwl_mvm_d0i3_enable_tx() argument
1185 lockdep_assert_held(&mvm->mutex); in iwl_mvm_d0i3_enable_tx()
1187 spin_lock_bh(&mvm->d0i3_tx_lock); in iwl_mvm_d0i3_enable_tx()
1189 if (mvm->d0i3_ap_sta_id == IWL_MVM_STATION_COUNT) in iwl_mvm_d0i3_enable_tx()
1192 IWL_DEBUG_RPM(mvm, "re-enqueue packets\n"); in iwl_mvm_d0i3_enable_tx()
1196 mvm->fw_id_to_mac_id[mvm->d0i3_ap_sta_id], in iwl_mvm_d0i3_enable_tx()
1197 lockdep_is_held(&mvm->mutex)); in iwl_mvm_d0i3_enable_tx()
1204 if (mvm->d0i3_offloading && qos_seq) { in iwl_mvm_d0i3_enable_tx()
1216 while (!skb_queue_empty(&mvm->d0i3_tx)) { in iwl_mvm_d0i3_enable_tx()
1217 struct sk_buff *skb = __skb_dequeue(&mvm->d0i3_tx); in iwl_mvm_d0i3_enable_tx()
1219 if (!sta || iwl_mvm_tx_skb(mvm, skb, sta)) in iwl_mvm_d0i3_enable_tx()
1220 ieee80211_free_txskb(mvm->hw, skb); in iwl_mvm_d0i3_enable_tx()
1225 clear_bit(IWL_MVM_STATUS_IN_D0I3, &mvm->status); in iwl_mvm_d0i3_enable_tx()
1226 wake_up(&mvm->d0i3_exit_waitq); in iwl_mvm_d0i3_enable_tx()
1227 mvm->d0i3_ap_sta_id = IWL_MVM_STATION_COUNT; in iwl_mvm_d0i3_enable_tx()
1229 ieee80211_wake_queues(mvm->hw); in iwl_mvm_d0i3_enable_tx()
1231 spin_unlock_bh(&mvm->d0i3_tx_lock); in iwl_mvm_d0i3_enable_tx()
1236 struct iwl_mvm *mvm = container_of(wk, struct iwl_mvm, d0i3_exit_work); in iwl_mvm_d0i3_exit_work() local
1246 mutex_lock(&mvm->mutex); in iwl_mvm_d0i3_exit_work()
1247 ret = iwl_mvm_send_cmd(mvm, &get_status_cmd); in iwl_mvm_d0i3_exit_work()
1258 IWL_DEBUG_RPM(mvm, "wakeup reasons: 0x%x\n", wakeup_reasons); in iwl_mvm_d0i3_exit_work()
1265 mvm->hw, IEEE80211_IFACE_ITER_NORMAL, in iwl_mvm_d0i3_exit_work()
1266 iwl_mvm_d0i3_disconnect_iter, mvm); in iwl_mvm_d0i3_exit_work()
1268 iwl_mvm_d0i3_enable_tx(mvm, qos_seq); in iwl_mvm_d0i3_exit_work()
1275 iwl_mvm_update_changed_regdom(mvm); in iwl_mvm_d0i3_exit_work()
1277 iwl_mvm_unref(mvm, IWL_MVM_REF_EXIT_WORK); in iwl_mvm_d0i3_exit_work()
1278 mutex_unlock(&mvm->mutex); in iwl_mvm_d0i3_exit_work()
1281 int _iwl_mvm_exit_d0i3(struct iwl_mvm *mvm) in _iwl_mvm_exit_d0i3() argument
1287 IWL_DEBUG_RPM(mvm, "MVM exiting D0i3\n"); in _iwl_mvm_exit_d0i3()
1289 mutex_lock(&mvm->d0i3_suspend_mutex); in _iwl_mvm_exit_d0i3()
1290 if (test_bit(D0I3_DEFER_WAKEUP, &mvm->d0i3_suspend_flags)) { in _iwl_mvm_exit_d0i3()
1291 IWL_DEBUG_RPM(mvm, "Deferring d0i3 exit until resume\n"); in _iwl_mvm_exit_d0i3()
1292 __set_bit(D0I3_PENDING_WAKEUP, &mvm->d0i3_suspend_flags); in _iwl_mvm_exit_d0i3()
1293 mutex_unlock(&mvm->d0i3_suspend_mutex); in _iwl_mvm_exit_d0i3()
1296 mutex_unlock(&mvm->d0i3_suspend_mutex); in _iwl_mvm_exit_d0i3()
1298 ret = iwl_mvm_send_cmd_pdu(mvm, D0I3_END_CMD, flags, 0, NULL); in _iwl_mvm_exit_d0i3()
1302 ieee80211_iterate_active_interfaces_atomic(mvm->hw, in _iwl_mvm_exit_d0i3()
1305 mvm); in _iwl_mvm_exit_d0i3()
1307 schedule_work(&mvm->d0i3_exit_work); in _iwl_mvm_exit_d0i3()
1313 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_exit_d0i3() local
1315 iwl_mvm_ref(mvm, IWL_MVM_REF_EXIT_WORK); in iwl_mvm_exit_d0i3()
1316 return _iwl_mvm_exit_d0i3(mvm); in iwl_mvm_exit_d0i3()
1325 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_napi_add() local
1327 ieee80211_napi_add(mvm->hw, napi, napi_dev, poll, weight); in iwl_mvm_napi_add()