Lines Matching refs:mvm

144 	struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode);  in iwl_mvm_nic_config()  local
147 u32 phy_config = iwl_mvm_get_phy_config(mvm); in iwl_mvm_nic_config()
157 reg_val |= CSR_HW_REV_STEP(mvm->trans->hw_rev) << in iwl_mvm_nic_config()
159 reg_val |= CSR_HW_REV_DASH(mvm->trans->hw_rev) << in iwl_mvm_nic_config()
177 if (mvm->trans->cfg->device_family != IWL_DEVICE_FAMILY_8000) in iwl_mvm_nic_config()
180 iwl_trans_set_bits_mask(mvm->trans, CSR_HW_IF_CONFIG_REG, in iwl_mvm_nic_config()
190 IWL_DEBUG_INFO(mvm, "Radio type=0x%x-0x%x-0x%x\n", radio_cfg_type, in iwl_mvm_nic_config()
198 if (!mvm->trans->cfg->apmg_not_supported) in iwl_mvm_nic_config()
199 iwl_set_bits_mask_prph(mvm->trans, APMG_PS_CTRL_REG, in iwl_mvm_nic_config()
207 void (*fn)(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb);
397 struct iwl_mvm *mvm; in iwl_op_mode_mvm_start() local
410 BUILD_BUG_ON(ARRAY_SIZE(mvm->fw_id_to_mac_id) != IWL_MVM_STATION_COUNT); in iwl_op_mode_mvm_start()
429 mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_op_mode_mvm_start()
430 mvm->dev = trans->dev; in iwl_op_mode_mvm_start()
431 mvm->trans = trans; in iwl_op_mode_mvm_start()
432 mvm->cfg = cfg; in iwl_op_mode_mvm_start()
433 mvm->fw = fw; in iwl_op_mode_mvm_start()
434 mvm->hw = hw; in iwl_op_mode_mvm_start()
436 if (iwl_mvm_has_new_rx_api(mvm)) { in iwl_op_mode_mvm_start()
445 mvm->restart_fw = iwlwifi_mod_params.restart_fw ? -1 : 0; in iwl_op_mode_mvm_start()
447 mvm->aux_queue = 15; in iwl_op_mode_mvm_start()
448 mvm->first_agg_queue = 16; in iwl_op_mode_mvm_start()
449 mvm->last_agg_queue = mvm->cfg->base_params->num_of_queues - 1; in iwl_op_mode_mvm_start()
450 if (mvm->cfg->base_params->num_of_queues == 16) { in iwl_op_mode_mvm_start()
451 mvm->aux_queue = 11; in iwl_op_mode_mvm_start()
452 mvm->first_agg_queue = 12; in iwl_op_mode_mvm_start()
454 mvm->sf_state = SF_UNINIT; in iwl_op_mode_mvm_start()
455 mvm->low_latency_agg_frame_limit = 6; in iwl_op_mode_mvm_start()
456 mvm->cur_ucode = IWL_UCODE_INIT; in iwl_op_mode_mvm_start()
458 mutex_init(&mvm->mutex); in iwl_op_mode_mvm_start()
459 mutex_init(&mvm->d0i3_suspend_mutex); in iwl_op_mode_mvm_start()
460 spin_lock_init(&mvm->async_handlers_lock); in iwl_op_mode_mvm_start()
461 INIT_LIST_HEAD(&mvm->time_event_list); in iwl_op_mode_mvm_start()
462 INIT_LIST_HEAD(&mvm->aux_roc_te_list); in iwl_op_mode_mvm_start()
463 INIT_LIST_HEAD(&mvm->async_handlers_list); in iwl_op_mode_mvm_start()
464 spin_lock_init(&mvm->time_event_lock); in iwl_op_mode_mvm_start()
465 spin_lock_init(&mvm->queue_info_lock); in iwl_op_mode_mvm_start()
467 INIT_WORK(&mvm->async_handlers_wk, iwl_mvm_async_handlers_wk); in iwl_op_mode_mvm_start()
468 INIT_WORK(&mvm->roc_done_wk, iwl_mvm_roc_done_wk); in iwl_op_mode_mvm_start()
469 INIT_WORK(&mvm->sta_drained_wk, iwl_mvm_sta_drained_wk); in iwl_op_mode_mvm_start()
470 INIT_WORK(&mvm->d0i3_exit_work, iwl_mvm_d0i3_exit_work); in iwl_op_mode_mvm_start()
471 INIT_DELAYED_WORK(&mvm->fw_dump_wk, iwl_mvm_fw_error_dump_wk); in iwl_op_mode_mvm_start()
472 INIT_DELAYED_WORK(&mvm->tdls_cs.dwork, iwl_mvm_tdls_ch_switch_work); in iwl_op_mode_mvm_start()
474 spin_lock_init(&mvm->d0i3_tx_lock); in iwl_op_mode_mvm_start()
475 spin_lock_init(&mvm->refs_lock); in iwl_op_mode_mvm_start()
476 skb_queue_head_init(&mvm->d0i3_tx); in iwl_op_mode_mvm_start()
477 init_waitqueue_head(&mvm->d0i3_exit_waitq); in iwl_op_mode_mvm_start()
479 SET_IEEE80211_DEV(mvm->hw, mvm->trans->dev); in iwl_op_mode_mvm_start()
489 trans_cfg.wide_cmd_header = fw_has_api(&mvm->fw->ucode_capa, in iwl_op_mode_mvm_start()
492 if (mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_DW_BC_TABLE) in iwl_op_mode_mvm_start()
505 iwl_mvm_get_wd_timeout(mvm, NULL, false, true); in iwl_op_mode_mvm_start()
507 snprintf(mvm->hw->wiphy->fw_version, in iwl_op_mode_mvm_start()
508 sizeof(mvm->hw->wiphy->fw_version), in iwl_op_mode_mvm_start()
512 iwl_trans_configure(mvm->trans, &trans_cfg); in iwl_op_mode_mvm_start()
516 trans->dbg_dest_tlv = mvm->fw->dbg_dest_tlv; in iwl_op_mode_mvm_start()
517 trans->dbg_dest_reg_num = mvm->fw->dbg_dest_reg_num; in iwl_op_mode_mvm_start()
518 memcpy(trans->dbg_conf_tlv, mvm->fw->dbg_conf_tlv, in iwl_op_mode_mvm_start()
520 trans->dbg_trigger_tlv = mvm->fw->dbg_trigger_tlv; in iwl_op_mode_mvm_start()
523 iwl_notification_wait_init(&mvm->notif_wait); in iwl_op_mode_mvm_start()
526 mvm->phy_db = iwl_phy_db_init(trans); in iwl_op_mode_mvm_start()
527 if (!mvm->phy_db) { in iwl_op_mode_mvm_start()
528 IWL_ERR(mvm, "Cannot init phy_db\n"); in iwl_op_mode_mvm_start()
532 IWL_INFO(mvm, "Detected %s, REV=0x%X\n", in iwl_op_mode_mvm_start()
533 mvm->cfg->name, mvm->trans->hw_rev); in iwl_op_mode_mvm_start()
536 iwl_mvm_tt_initialize(mvm, min_backoff); in iwl_op_mode_mvm_start()
539 mvm->nvm_file_name = iwlwifi_mod_params.nvm_file; in iwl_op_mode_mvm_start()
541 IWL_DEBUG_EEPROM(mvm->trans->dev, in iwl_op_mode_mvm_start()
544 if (WARN(cfg->no_power_up_nic_in_init && !mvm->nvm_file_name, in iwl_op_mode_mvm_start()
554 if (cfg->no_power_up_nic_in_init && mvm->nvm_file_name) { in iwl_op_mode_mvm_start()
555 err = iwl_nvm_init(mvm, false); in iwl_op_mode_mvm_start()
559 err = iwl_trans_start_hw(mvm->trans); in iwl_op_mode_mvm_start()
563 mutex_lock(&mvm->mutex); in iwl_op_mode_mvm_start()
564 err = iwl_run_init_mvm_ucode(mvm, true); in iwl_op_mode_mvm_start()
567 mutex_unlock(&mvm->mutex); in iwl_op_mode_mvm_start()
570 IWL_ERR(mvm, "Failed to run INIT ucode: %d\n", err); in iwl_op_mode_mvm_start()
575 scan_size = iwl_mvm_scan_size(mvm); in iwl_op_mode_mvm_start()
577 mvm->scan_cmd = kmalloc(scan_size, GFP_KERNEL); in iwl_op_mode_mvm_start()
578 if (!mvm->scan_cmd) in iwl_op_mode_mvm_start()
582 mvm->last_ebs_successful = true; in iwl_op_mode_mvm_start()
584 err = iwl_mvm_mac_setup_register(mvm); in iwl_op_mode_mvm_start()
588 err = iwl_mvm_dbgfs_register(mvm, dbgfs_dir); in iwl_op_mode_mvm_start()
592 memset(&mvm->rx_stats, 0, sizeof(struct mvm_statistics_rx)); in iwl_op_mode_mvm_start()
595 mvm->refs[IWL_MVM_REF_UCODE_DOWN] = 1; in iwl_op_mode_mvm_start()
597 iwl_mvm_tof_init(mvm); in iwl_op_mode_mvm_start()
602 ieee80211_unregister_hw(mvm->hw); in iwl_op_mode_mvm_start()
603 iwl_mvm_leds_exit(mvm); in iwl_op_mode_mvm_start()
605 flush_delayed_work(&mvm->fw_dump_wk); in iwl_op_mode_mvm_start()
606 iwl_phy_db_free(mvm->phy_db); in iwl_op_mode_mvm_start()
607 kfree(mvm->scan_cmd); in iwl_op_mode_mvm_start()
608 if (!cfg->no_power_up_nic_in_init || !mvm->nvm_file_name) in iwl_op_mode_mvm_start()
610 ieee80211_free_hw(mvm->hw); in iwl_op_mode_mvm_start()
616 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_op_mode_mvm_stop() local
619 iwl_mvm_leds_exit(mvm); in iwl_op_mode_mvm_stop()
621 iwl_mvm_tt_exit(mvm); in iwl_op_mode_mvm_stop()
623 ieee80211_unregister_hw(mvm->hw); in iwl_op_mode_mvm_stop()
625 kfree(mvm->scan_cmd); in iwl_op_mode_mvm_stop()
626 kfree(mvm->mcast_filter_cmd); in iwl_op_mode_mvm_stop()
627 mvm->mcast_filter_cmd = NULL; in iwl_op_mode_mvm_stop()
630 kfree(mvm->d3_resume_sram); in iwl_op_mode_mvm_stop()
631 if (mvm->nd_config) { in iwl_op_mode_mvm_stop()
632 kfree(mvm->nd_config->match_sets); in iwl_op_mode_mvm_stop()
633 kfree(mvm->nd_config->scan_plans); in iwl_op_mode_mvm_stop()
634 kfree(mvm->nd_config); in iwl_op_mode_mvm_stop()
635 mvm->nd_config = NULL; in iwl_op_mode_mvm_stop()
639 iwl_trans_op_mode_leave(mvm->trans); in iwl_op_mode_mvm_stop()
641 iwl_phy_db_free(mvm->phy_db); in iwl_op_mode_mvm_stop()
642 mvm->phy_db = NULL; in iwl_op_mode_mvm_stop()
644 iwl_free_nvm_data(mvm->nvm_data); in iwl_op_mode_mvm_stop()
646 kfree(mvm->nvm_sections[i].data); in iwl_op_mode_mvm_stop()
648 iwl_mvm_tof_clean(mvm); in iwl_op_mode_mvm_stop()
650 ieee80211_free_hw(mvm->hw); in iwl_op_mode_mvm_stop()
656 void (*fn)(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb);
659 void iwl_mvm_async_handlers_purge(struct iwl_mvm *mvm) in iwl_mvm_async_handlers_purge() argument
663 spin_lock_bh(&mvm->async_handlers_lock); in iwl_mvm_async_handlers_purge()
664 list_for_each_entry_safe(entry, tmp, &mvm->async_handlers_list, list) { in iwl_mvm_async_handlers_purge()
669 spin_unlock_bh(&mvm->async_handlers_lock); in iwl_mvm_async_handlers_purge()
674 struct iwl_mvm *mvm = in iwl_mvm_async_handlers_wk() local
682 mutex_lock(&mvm->mutex); in iwl_mvm_async_handlers_wk()
688 spin_lock_bh(&mvm->async_handlers_lock); in iwl_mvm_async_handlers_wk()
689 list_splice_init(&mvm->async_handlers_list, &local_list); in iwl_mvm_async_handlers_wk()
690 spin_unlock_bh(&mvm->async_handlers_lock); in iwl_mvm_async_handlers_wk()
693 entry->fn(mvm, &entry->rxb); in iwl_mvm_async_handlers_wk()
698 mutex_unlock(&mvm->mutex); in iwl_mvm_async_handlers_wk()
701 static inline void iwl_mvm_rx_check_trigger(struct iwl_mvm *mvm, in iwl_mvm_rx_check_trigger() argument
708 if (!iwl_fw_dbg_trigger_enabled(mvm->fw, FW_DBG_TRIGGER_FW_NOTIF)) in iwl_mvm_rx_check_trigger()
711 trig = iwl_fw_dbg_get_trigger(mvm->fw, FW_DBG_TRIGGER_FW_NOTIF); in iwl_mvm_rx_check_trigger()
714 if (!iwl_fw_dbg_trigger_check_stop(mvm, NULL, trig)) in iwl_mvm_rx_check_trigger()
726 iwl_mvm_fw_dbg_collect_trig(mvm, trig, in iwl_mvm_rx_check_trigger()
733 static void iwl_mvm_rx_common(struct iwl_mvm *mvm, in iwl_mvm_rx_common() argument
739 iwl_mvm_rx_check_trigger(mvm, pkt); in iwl_mvm_rx_common()
746 iwl_notification_wait_notify(&mvm->notif_wait, pkt); in iwl_mvm_rx_common()
756 rx_h->fn(mvm, rxb); in iwl_mvm_rx_common()
769 spin_lock(&mvm->async_handlers_lock); in iwl_mvm_rx_common()
770 list_add_tail(&entry->list, &mvm->async_handlers_list); in iwl_mvm_rx_common()
771 spin_unlock(&mvm->async_handlers_lock); in iwl_mvm_rx_common()
772 schedule_work(&mvm->async_handlers_wk); in iwl_mvm_rx_common()
782 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_rx() local
785 iwl_mvm_rx_rx_mpdu(mvm, napi, rxb); in iwl_mvm_rx()
787 iwl_mvm_rx_rx_phy_cmd(mvm, rxb); in iwl_mvm_rx()
789 iwl_mvm_rx_common(mvm, rxb, pkt); in iwl_mvm_rx()
797 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_rx_mq() local
800 iwl_mvm_rx_rx_mpdu(mvm, napi, rxb); in iwl_mvm_rx_mq()
802 iwl_mvm_rx_rx_phy_cmd(mvm, rxb); in iwl_mvm_rx_mq()
804 iwl_mvm_rx_common(mvm, rxb, pkt); in iwl_mvm_rx_mq()
809 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_stop_sw_queue() local
813 spin_lock_bh(&mvm->queue_info_lock); in iwl_mvm_stop_sw_queue()
814 mq = mvm->queue_info[queue].hw_queue_to_mac80211; in iwl_mvm_stop_sw_queue()
815 spin_unlock_bh(&mvm->queue_info_lock); in iwl_mvm_stop_sw_queue()
821 if (atomic_inc_return(&mvm->mac80211_queue_stop_count[q]) > 1) { in iwl_mvm_stop_sw_queue()
822 IWL_DEBUG_TX_QUEUES(mvm, in iwl_mvm_stop_sw_queue()
828 ieee80211_stop_queue(mvm->hw, q); in iwl_mvm_stop_sw_queue()
834 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_wake_sw_queue() local
838 spin_lock_bh(&mvm->queue_info_lock); in iwl_mvm_wake_sw_queue()
839 mq = mvm->queue_info[queue].hw_queue_to_mac80211; in iwl_mvm_wake_sw_queue()
840 spin_unlock_bh(&mvm->queue_info_lock); in iwl_mvm_wake_sw_queue()
846 if (atomic_dec_return(&mvm->mac80211_queue_stop_count[q]) > 0) { in iwl_mvm_wake_sw_queue()
847 IWL_DEBUG_TX_QUEUES(mvm, in iwl_mvm_wake_sw_queue()
853 ieee80211_wake_queue(mvm->hw, q); in iwl_mvm_wake_sw_queue()
857 void iwl_mvm_set_hw_ctkill_state(struct iwl_mvm *mvm, bool state) in iwl_mvm_set_hw_ctkill_state() argument
860 set_bit(IWL_MVM_STATUS_HW_CTKILL, &mvm->status); in iwl_mvm_set_hw_ctkill_state()
862 clear_bit(IWL_MVM_STATUS_HW_CTKILL, &mvm->status); in iwl_mvm_set_hw_ctkill_state()
864 wiphy_rfkill_set_hw_state(mvm->hw->wiphy, iwl_mvm_is_radio_killed(mvm)); in iwl_mvm_set_hw_ctkill_state()
869 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_set_hw_rfkill_state() local
870 bool calibrating = ACCESS_ONCE(mvm->calibrating); in iwl_mvm_set_hw_rfkill_state()
873 set_bit(IWL_MVM_STATUS_HW_RFKILL, &mvm->status); in iwl_mvm_set_hw_rfkill_state()
875 clear_bit(IWL_MVM_STATUS_HW_RFKILL, &mvm->status); in iwl_mvm_set_hw_rfkill_state()
877 wiphy_rfkill_set_hw_state(mvm->hw->wiphy, iwl_mvm_is_radio_killed(mvm)); in iwl_mvm_set_hw_rfkill_state()
881 iwl_abort_notification_waits(&mvm->notif_wait); in iwl_mvm_set_hw_rfkill_state()
887 return state && (mvm->cur_ucode != IWL_UCODE_INIT || calibrating); in iwl_mvm_set_hw_rfkill_state()
892 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_free_skb() local
896 iwl_trans_free_tx_cmd(mvm->trans, info->driver_data[1]); in iwl_mvm_free_skb()
897 ieee80211_free_txskb(mvm->hw, skb); in iwl_mvm_free_skb()
918 struct iwl_mvm *mvm = in iwl_mvm_fw_error_dump_wk() local
921 if (iwl_mvm_ref_sync(mvm, IWL_MVM_REF_FW_DBG_COLLECT)) in iwl_mvm_fw_error_dump_wk()
924 mutex_lock(&mvm->mutex); in iwl_mvm_fw_error_dump_wk()
927 if (mvm->cfg->device_family == IWL_DEVICE_FAMILY_7000) { in iwl_mvm_fw_error_dump_wk()
928 iwl_set_bits_prph(mvm->trans, MON_BUFF_SAMPLE_CTL, 0x100); in iwl_mvm_fw_error_dump_wk()
930 iwl_write_prph(mvm->trans, DBGC_IN_SAMPLE, 0); in iwl_mvm_fw_error_dump_wk()
935 iwl_mvm_fw_error_dump(mvm); in iwl_mvm_fw_error_dump_wk()
938 WARN_ON_ONCE((!test_bit(STATUS_FW_ERROR, &mvm->trans->status)) && in iwl_mvm_fw_error_dump_wk()
939 mvm->fw->dbg_dest_tlv && in iwl_mvm_fw_error_dump_wk()
940 iwl_mvm_start_fw_dbg_conf(mvm, mvm->fw_dbg_conf)); in iwl_mvm_fw_error_dump_wk()
942 mutex_unlock(&mvm->mutex); in iwl_mvm_fw_error_dump_wk()
944 iwl_mvm_unref(mvm, IWL_MVM_REF_FW_DBG_COLLECT); in iwl_mvm_fw_error_dump_wk()
947 void iwl_mvm_nic_restart(struct iwl_mvm *mvm, bool fw_error) in iwl_mvm_nic_restart() argument
949 iwl_abort_notification_waits(&mvm->notif_wait); in iwl_mvm_nic_restart()
961 iwl_mvm_report_scan_aborted(mvm); in iwl_mvm_nic_restart()
969 if (!mvm->restart_fw && fw_error) { in iwl_mvm_nic_restart()
970 iwl_mvm_fw_dbg_collect_desc(mvm, &iwl_mvm_dump_desc_assert, in iwl_mvm_nic_restart()
973 &mvm->status)) { in iwl_mvm_nic_restart()
976 IWL_ERR(mvm, in iwl_mvm_nic_restart()
985 IWL_ERR(mvm, "Module is being unloaded - abort\n"); in iwl_mvm_nic_restart()
994 reprobe->dev = mvm->trans->dev; in iwl_mvm_nic_restart()
997 } else if (mvm->cur_ucode == IWL_UCODE_REGULAR) { in iwl_mvm_nic_restart()
999 iwl_mvm_ref(mvm, IWL_MVM_REF_UCODE_DOWN); in iwl_mvm_nic_restart()
1001 if (fw_error && mvm->restart_fw > 0) in iwl_mvm_nic_restart()
1002 mvm->restart_fw--; in iwl_mvm_nic_restart()
1003 ieee80211_restart_hw(mvm->hw); in iwl_mvm_nic_restart()
1009 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_nic_error() local
1011 iwl_mvm_dump_nic_error_log(mvm); in iwl_mvm_nic_error()
1013 iwl_mvm_nic_restart(mvm, true); in iwl_mvm_nic_error()
1018 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_cmd_queue_full() local
1021 iwl_mvm_nic_restart(mvm, true); in iwl_mvm_cmd_queue_full()
1025 struct iwl_mvm *mvm; member
1032 static bool iwl_mvm_disallow_offloading(struct iwl_mvm *mvm, in iwl_mvm_disallow_offloading() argument
1046 ap_sta = rcu_dereference(mvm->fw_id_to_mac_id[mvmvif->ap_sta_id]); in iwl_mvm_disallow_offloading()
1088 struct iwl_mvm *mvm = data->mvm; in iwl_mvm_enter_d0i3_iterator() local
1092 IWL_DEBUG_RPM(mvm, "entering D0i3 - vif %pM\n", vif->addr); in iwl_mvm_enter_d0i3_iterator()
1102 if (iwl_mvm_disallow_offloading(mvm, vif, data)) in iwl_mvm_enter_d0i3_iterator()
1105 iwl_mvm_update_d0i3_power_mode(mvm, vif, true, flags); in iwl_mvm_enter_d0i3_iterator()
1106 iwl_mvm_send_proto_offload(mvm, vif, data->disable_offloading, flags); in iwl_mvm_enter_d0i3_iterator()
1118 static void iwl_mvm_set_wowlan_data(struct iwl_mvm *mvm, in iwl_mvm_set_wowlan_data() argument
1130 ap_sta = rcu_dereference(mvm->fw_id_to_mac_id[iter_data->ap_sta_id]); in iwl_mvm_set_wowlan_data()
1149 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_enter_d0i3() local
1153 .mvm = mvm, in iwl_mvm_enter_d0i3()
1166 IWL_DEBUG_RPM(mvm, "MVM entering D0i3\n"); in iwl_mvm_enter_d0i3()
1168 set_bit(IWL_MVM_STATUS_IN_D0I3, &mvm->status); in iwl_mvm_enter_d0i3()
1176 if (iwl_mvm_ref_taken(mvm)) { in iwl_mvm_enter_d0i3()
1177 IWL_DEBUG_RPM(mvm->trans, "abort d0i3 due to taken ref\n"); in iwl_mvm_enter_d0i3()
1178 clear_bit(IWL_MVM_STATUS_IN_D0I3, &mvm->status); in iwl_mvm_enter_d0i3()
1179 wake_up(&mvm->d0i3_exit_waitq); in iwl_mvm_enter_d0i3()
1183 ieee80211_iterate_active_interfaces_atomic(mvm->hw, in iwl_mvm_enter_d0i3()
1188 mvm->d0i3_ap_sta_id = d0i3_iter_data.ap_sta_id; in iwl_mvm_enter_d0i3()
1189 mvm->d0i3_offloading = !d0i3_iter_data.disable_offloading; in iwl_mvm_enter_d0i3()
1192 mvm->d0i3_ap_sta_id = IWL_MVM_STATION_COUNT; in iwl_mvm_enter_d0i3()
1193 mvm->d0i3_offloading = false; in iwl_mvm_enter_d0i3()
1200 if (mvm->d0i3_ap_sta_id != IWL_MVM_STATION_COUNT) { in iwl_mvm_enter_d0i3()
1201 iwl_mvm_set_wowlan_data(mvm, &wowlan_config_cmd, in iwl_mvm_enter_d0i3()
1204 ret = iwl_mvm_send_cmd_pdu(mvm, WOWLAN_CONFIGURATION, flags, in iwl_mvm_enter_d0i3()
1211 return iwl_mvm_send_cmd_pdu(mvm, D3_CONFIG_CMD, in iwl_mvm_enter_d0i3()
1219 struct iwl_mvm *mvm = _data; in iwl_mvm_exit_d0i3_iterator() local
1222 IWL_DEBUG_RPM(mvm, "exiting D0i3 - vif %pM\n", vif->addr); in iwl_mvm_exit_d0i3_iterator()
1227 iwl_mvm_update_d0i3_power_mode(mvm, vif, false, flags); in iwl_mvm_exit_d0i3_iterator()
1231 struct iwl_mvm *mvm; member
1242 data->mvm->d0i3_ap_sta_id == mvmvif->ap_sta_id) { in iwl_mvm_d0i3_wakeup_reason_iter()
1245 iwl_mvm_connection_loss(data->mvm, vif, "D0i3"); in iwl_mvm_d0i3_wakeup_reason_iter()
1251 void iwl_mvm_d0i3_enable_tx(struct iwl_mvm *mvm, __le16 *qos_seq) in iwl_mvm_d0i3_enable_tx() argument
1258 lockdep_assert_held(&mvm->mutex); in iwl_mvm_d0i3_enable_tx()
1260 spin_lock_bh(&mvm->d0i3_tx_lock); in iwl_mvm_d0i3_enable_tx()
1262 if (mvm->d0i3_ap_sta_id == IWL_MVM_STATION_COUNT) in iwl_mvm_d0i3_enable_tx()
1265 IWL_DEBUG_RPM(mvm, "re-enqueue packets\n"); in iwl_mvm_d0i3_enable_tx()
1269 mvm->fw_id_to_mac_id[mvm->d0i3_ap_sta_id], in iwl_mvm_d0i3_enable_tx()
1270 lockdep_is_held(&mvm->mutex)); in iwl_mvm_d0i3_enable_tx()
1277 if (mvm->d0i3_offloading && qos_seq) { in iwl_mvm_d0i3_enable_tx()
1289 while (!skb_queue_empty(&mvm->d0i3_tx)) { in iwl_mvm_d0i3_enable_tx()
1290 struct sk_buff *skb = __skb_dequeue(&mvm->d0i3_tx); in iwl_mvm_d0i3_enable_tx()
1292 if (!sta || iwl_mvm_tx_skb(mvm, skb, sta)) in iwl_mvm_d0i3_enable_tx()
1293 ieee80211_free_txskb(mvm->hw, skb); in iwl_mvm_d0i3_enable_tx()
1298 clear_bit(IWL_MVM_STATUS_IN_D0I3, &mvm->status); in iwl_mvm_d0i3_enable_tx()
1299 wake_up(&mvm->d0i3_exit_waitq); in iwl_mvm_d0i3_enable_tx()
1300 mvm->d0i3_ap_sta_id = IWL_MVM_STATION_COUNT; in iwl_mvm_d0i3_enable_tx()
1302 ieee80211_wake_queues(mvm->hw); in iwl_mvm_d0i3_enable_tx()
1304 spin_unlock_bh(&mvm->d0i3_tx_lock); in iwl_mvm_d0i3_enable_tx()
1309 struct iwl_mvm *mvm = container_of(wk, struct iwl_mvm, d0i3_exit_work); in iwl_mvm_d0i3_exit_work() local
1319 mutex_lock(&mvm->mutex); in iwl_mvm_d0i3_exit_work()
1320 ret = iwl_mvm_send_cmd(mvm, &get_status_cmd); in iwl_mvm_d0i3_exit_work()
1331 IWL_DEBUG_RPM(mvm, "wakeup reasons: 0x%x\n", wakeup_reasons); in iwl_mvm_d0i3_exit_work()
1337 .mvm = mvm, in iwl_mvm_d0i3_exit_work()
1342 mvm->hw, IEEE80211_IFACE_ITER_NORMAL, in iwl_mvm_d0i3_exit_work()
1346 iwl_mvm_d0i3_enable_tx(mvm, qos_seq); in iwl_mvm_d0i3_exit_work()
1348 IWL_DEBUG_INFO(mvm, "d0i3 exit completed (wakeup reasons: 0x%x)\n", in iwl_mvm_d0i3_exit_work()
1356 iwl_mvm_update_changed_regdom(mvm); in iwl_mvm_d0i3_exit_work()
1358 iwl_mvm_unref(mvm, IWL_MVM_REF_EXIT_WORK); in iwl_mvm_d0i3_exit_work()
1359 mutex_unlock(&mvm->mutex); in iwl_mvm_d0i3_exit_work()
1362 int _iwl_mvm_exit_d0i3(struct iwl_mvm *mvm) in _iwl_mvm_exit_d0i3() argument
1368 IWL_DEBUG_RPM(mvm, "MVM exiting D0i3\n"); in _iwl_mvm_exit_d0i3()
1370 mutex_lock(&mvm->d0i3_suspend_mutex); in _iwl_mvm_exit_d0i3()
1371 if (test_bit(D0I3_DEFER_WAKEUP, &mvm->d0i3_suspend_flags)) { in _iwl_mvm_exit_d0i3()
1372 IWL_DEBUG_RPM(mvm, "Deferring d0i3 exit until resume\n"); in _iwl_mvm_exit_d0i3()
1373 __set_bit(D0I3_PENDING_WAKEUP, &mvm->d0i3_suspend_flags); in _iwl_mvm_exit_d0i3()
1374 mutex_unlock(&mvm->d0i3_suspend_mutex); in _iwl_mvm_exit_d0i3()
1377 mutex_unlock(&mvm->d0i3_suspend_mutex); in _iwl_mvm_exit_d0i3()
1379 ret = iwl_mvm_send_cmd_pdu(mvm, D0I3_END_CMD, flags, 0, NULL); in _iwl_mvm_exit_d0i3()
1383 ieee80211_iterate_active_interfaces_atomic(mvm->hw, in _iwl_mvm_exit_d0i3()
1386 mvm); in _iwl_mvm_exit_d0i3()
1388 schedule_work(&mvm->d0i3_exit_work); in _iwl_mvm_exit_d0i3()
1394 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_exit_d0i3() local
1396 iwl_mvm_ref(mvm, IWL_MVM_REF_EXIT_WORK); in iwl_mvm_exit_d0i3()
1397 return _iwl_mvm_exit_d0i3(mvm); in iwl_mvm_exit_d0i3()
1425 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in iwl_mvm_rx_mq_rss() local
1427 iwl_mvm_rx_rx_mpdu(mvm, napi, rxb); in iwl_mvm_rx_mq_rss()