Lines Matching refs:priv

97 int iwlagn_mac_setup_register(struct iwl_priv *priv,  in iwlagn_mac_setup_register()  argument
101 struct ieee80211_hw *hw = priv->hw; in iwlagn_mac_setup_register()
127 if (priv->nvm_data->sku_cap_11n_enable) in iwlagn_mac_setup_register()
136 if (priv->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_MFP && in iwlagn_mac_setup_register()
143 for_each_context(priv, ctx) { in iwlagn_mac_setup_register()
162 if (priv->fw->img[IWL_UCODE_WOWLAN].sec[0].len && in iwlagn_mac_setup_register()
163 priv->trans->ops->d3_suspend && in iwlagn_mac_setup_register()
164 priv->trans->ops->d3_resume && in iwlagn_mac_setup_register()
165 device_can_wakeup(priv->trans->dev)) { in iwlagn_mac_setup_register()
166 priv->wowlan_support.flags = WIPHY_WOWLAN_MAGIC_PKT | in iwlagn_mac_setup_register()
171 priv->wowlan_support.flags |= in iwlagn_mac_setup_register()
175 priv->wowlan_support.n_patterns = IWLAGN_WOWLAN_MAX_PATTERNS; in iwlagn_mac_setup_register()
176 priv->wowlan_support.pattern_min_len = in iwlagn_mac_setup_register()
178 priv->wowlan_support.pattern_max_len = in iwlagn_mac_setup_register()
180 hw->wiphy->wowlan = &priv->wowlan_support; in iwlagn_mac_setup_register()
201 if (priv->nvm_data->bands[IEEE80211_BAND_2GHZ].n_channels) in iwlagn_mac_setup_register()
202 priv->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = in iwlagn_mac_setup_register()
203 &priv->nvm_data->bands[IEEE80211_BAND_2GHZ]; in iwlagn_mac_setup_register()
204 if (priv->nvm_data->bands[IEEE80211_BAND_5GHZ].n_channels) in iwlagn_mac_setup_register()
205 priv->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = in iwlagn_mac_setup_register()
206 &priv->nvm_data->bands[IEEE80211_BAND_5GHZ]; in iwlagn_mac_setup_register()
208 hw->wiphy->hw_version = priv->trans->hw_id; in iwlagn_mac_setup_register()
210 iwl_leds_init(priv); in iwlagn_mac_setup_register()
212 ret = ieee80211_register_hw(priv->hw); in iwlagn_mac_setup_register()
214 IWL_ERR(priv, "Failed to register hw (error %d)\n", ret); in iwlagn_mac_setup_register()
215 iwl_leds_exit(priv); in iwlagn_mac_setup_register()
218 priv->mac80211_registered = 1; in iwlagn_mac_setup_register()
223 void iwlagn_mac_unregister(struct iwl_priv *priv) in iwlagn_mac_unregister() argument
225 if (!priv->mac80211_registered) in iwlagn_mac_unregister()
227 iwl_leds_exit(priv); in iwlagn_mac_unregister()
228 ieee80211_unregister_hw(priv->hw); in iwlagn_mac_unregister()
229 priv->mac80211_registered = 0; in iwlagn_mac_unregister()
232 static int __iwl_up(struct iwl_priv *priv) in __iwl_up() argument
237 lockdep_assert_held(&priv->mutex); in __iwl_up()
239 if (test_bit(STATUS_EXIT_PENDING, &priv->status)) { in __iwl_up()
240 IWL_WARN(priv, "Exit pending; will not bring the NIC up\n"); in __iwl_up()
244 for_each_context(priv, ctx) { in __iwl_up()
245 ret = iwlagn_alloc_bcast_station(priv, ctx); in __iwl_up()
247 iwl_dealloc_bcast_stations(priv); in __iwl_up()
252 ret = iwl_run_init_ucode(priv); in __iwl_up()
254 IWL_ERR(priv, "Failed to run INIT ucode: %d\n", ret); in __iwl_up()
258 ret = iwl_load_ucode_wait_alive(priv, IWL_UCODE_REGULAR); in __iwl_up()
260 IWL_ERR(priv, "Failed to start RT ucode: %d\n", ret); in __iwl_up()
264 ret = iwl_alive_start(priv); in __iwl_up()
270 set_bit(STATUS_EXIT_PENDING, &priv->status); in __iwl_up()
271 iwl_down(priv); in __iwl_up()
272 clear_bit(STATUS_EXIT_PENDING, &priv->status); in __iwl_up()
274 IWL_ERR(priv, "Unable to initialize device.\n"); in __iwl_up()
280 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_start() local
283 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_start()
286 mutex_lock(&priv->mutex); in iwlagn_mac_start()
287 ret = __iwl_up(priv); in iwlagn_mac_start()
288 mutex_unlock(&priv->mutex); in iwlagn_mac_start()
292 IWL_DEBUG_INFO(priv, "Start UP work done.\n"); in iwlagn_mac_start()
295 if (WARN_ON(!test_bit(STATUS_READY, &priv->status))) in iwlagn_mac_start()
298 iwlagn_led_enable(priv); in iwlagn_mac_start()
300 priv->is_open = 1; in iwlagn_mac_start()
301 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_start()
307 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_stop() local
309 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_stop()
311 if (!priv->is_open) in iwlagn_mac_stop()
314 priv->is_open = 0; in iwlagn_mac_stop()
316 mutex_lock(&priv->mutex); in iwlagn_mac_stop()
317 iwl_down(priv); in iwlagn_mac_stop()
318 mutex_unlock(&priv->mutex); in iwlagn_mac_stop()
320 iwl_cancel_deferred_work(priv); in iwlagn_mac_stop()
322 flush_workqueue(priv->workqueue); in iwlagn_mac_stop()
324 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_stop()
331 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_set_rekey_data() local
336 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_set_rekey_data()
337 mutex_lock(&priv->mutex); in iwlagn_mac_set_rekey_data()
339 if (priv->contexts[IWL_RXON_CTX_BSS].vif != vif) in iwlagn_mac_set_rekey_data()
342 memcpy(priv->kek, data->kek, NL80211_KEK_LEN); in iwlagn_mac_set_rekey_data()
343 memcpy(priv->kck, data->kck, NL80211_KCK_LEN); in iwlagn_mac_set_rekey_data()
344 priv->replay_ctr = in iwlagn_mac_set_rekey_data()
346 priv->have_rekey_data = true; in iwlagn_mac_set_rekey_data()
349 mutex_unlock(&priv->mutex); in iwlagn_mac_set_rekey_data()
350 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_set_rekey_data()
358 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_suspend() local
359 struct iwl_rxon_context *ctx = &priv->contexts[IWL_RXON_CTX_BSS]; in iwlagn_mac_suspend()
365 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_suspend()
366 mutex_lock(&priv->mutex); in iwlagn_mac_suspend()
375 ret = iwlagn_suspend(priv, wowlan); in iwlagn_mac_suspend()
380 iwl_write32(priv->trans, CSR_UCODE_DRV_GP1_SET, in iwlagn_mac_suspend()
383 iwl_trans_d3_suspend(priv->trans, false); in iwlagn_mac_suspend()
388 priv->wowlan = false; in iwlagn_mac_suspend()
389 iwlagn_prepare_restart(priv); in iwlagn_mac_suspend()
390 ieee80211_restart_hw(priv->hw); in iwlagn_mac_suspend()
392 mutex_unlock(&priv->mutex); in iwlagn_mac_suspend()
393 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_suspend()
399 struct iwl_priv *priv; member
408 struct iwl_priv *priv = resume_data->priv; in iwl_resume_status_fn() local
411 IWL_ERR(priv, "rx wrong size data\n"); in iwl_resume_status_fn()
422 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_resume() local
423 struct iwl_rxon_context *ctx = &priv->contexts[IWL_RXON_CTX_BSS]; in iwlagn_mac_resume()
439 .priv = priv, in iwlagn_mac_resume()
450 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_resume()
451 mutex_lock(&priv->mutex); in iwlagn_mac_resume()
456 ret = iwl_trans_d3_resume(priv->trans, &d3_status, false); in iwlagn_mac_resume()
461 IWL_INFO(priv, "Device was reset during suspend\n"); in iwlagn_mac_resume()
466 iwl_write32(priv->trans, CSR_UCODE_DRV_GP1_CLR, in iwlagn_mac_resume()
469 base = priv->device_pointers.error_event_table; in iwlagn_mac_resume()
471 IWL_WARN(priv, "Invalid error table during resume!\n"); in iwlagn_mac_resume()
475 iwl_trans_read_mem_bytes(priv->trans, base, in iwlagn_mac_resume()
479 IWL_INFO(priv, "error table is valid (%d, 0x%x)\n", in iwlagn_mac_resume()
490 img = &priv->fw->img[IWL_UCODE_WOWLAN]; in iwlagn_mac_resume()
491 if (!priv->wowlan_sram) in iwlagn_mac_resume()
492 priv->wowlan_sram = in iwlagn_mac_resume()
496 if (priv->wowlan_sram) in iwlagn_mac_resume()
497 iwl_trans_read_mem(priv->trans, 0x800000, in iwlagn_mac_resume()
498 priv->wowlan_sram, in iwlagn_mac_resume()
510 iwl_init_notification_wait(&priv->notif_wait, &status_wait, status_cmd, in iwlagn_mac_resume()
514 iwl_dvm_send_cmd_pdu(priv, REPLY_WOWLAN_GET_STATUS, CMD_ASYNC, 0, NULL); in iwlagn_mac_resume()
515 iwl_dvm_send_cmd_pdu(priv, REPLY_ECHO, CMD_ASYNC, 0, NULL); in iwlagn_mac_resume()
518 ret = iwl_wait_notification(&priv->notif_wait, &status_wait, HZ/5); in iwlagn_mac_resume()
522 if (resume_data.valid && priv->contexts[IWL_RXON_CTX_BSS].vif) { in iwlagn_mac_resume()
526 IWL_INFO(priv, "WoWLAN wakeup reason(s): 0x%.8x\n", reasons); in iwlagn_mac_resume()
550 priv->wowlan = false; in iwlagn_mac_resume()
552 iwlagn_prepare_restart(priv); in iwlagn_mac_resume()
555 iwl_connection_init_rx_config(priv, ctx); in iwlagn_mac_resume()
556 iwlagn_set_rxon_chain(priv, ctx); in iwlagn_mac_resume()
559 mutex_unlock(&priv->mutex); in iwlagn_mac_resume()
560 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_resume()
569 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_set_wakeup() local
571 device_set_wakeup_enable(priv->trans->dev, enabled); in iwlagn_mac_set_wakeup()
579 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_tx() local
581 if (iwlagn_tx_skb(priv, control->sta, skb)) in iwlagn_mac_tx()
591 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_update_tkip_key() local
593 iwl_update_tkip_key(priv, vif, keyconf, sta, iv32, phase1key); in iwlagn_mac_update_tkip_key()
601 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_set_key() local
607 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_set_key()
610 IWL_DEBUG_MAC80211(priv, "leave - hwcrypto disabled\n"); in iwlagn_mac_set_key()
642 mutex_lock(&priv->mutex); in iwlagn_mac_set_key()
643 iwl_scan_cancel_timeout(priv, 100); in iwlagn_mac_set_key()
666 ret = iwl_set_default_wep_key(priv, vif_priv->ctx, key); in iwlagn_mac_set_key()
669 ret = iwl_set_dynamic_key(priv, vif_priv->ctx, key, sta); in iwlagn_mac_set_key()
679 IWL_DEBUG_MAC80211(priv, "enable hwcrypto key\n"); in iwlagn_mac_set_key()
683 ret = iwl_remove_default_wep_key(priv, ctx, key); in iwlagn_mac_set_key()
685 ret = iwl_remove_dynamic_key(priv, ctx, key, sta); in iwlagn_mac_set_key()
687 IWL_DEBUG_MAC80211(priv, "disable hwcrypto key\n"); in iwlagn_mac_set_key()
693 mutex_unlock(&priv->mutex); in iwlagn_mac_set_key()
694 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_set_key()
723 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_ampdu_action() local
727 IWL_DEBUG_HT(priv, "A-MPDU action on addr %pM tid %d\n", in iwlagn_mac_ampdu_action()
730 if (!(priv->nvm_data->sku_cap_11n_enable)) in iwlagn_mac_ampdu_action()
733 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_ampdu_action()
734 mutex_lock(&priv->mutex); in iwlagn_mac_ampdu_action()
738 if (!iwl_enable_rx_ampdu(priv->cfg)) in iwlagn_mac_ampdu_action()
740 IWL_DEBUG_HT(priv, "start Rx\n"); in iwlagn_mac_ampdu_action()
741 ret = iwl_sta_rx_agg_start(priv, sta, tid, *ssn); in iwlagn_mac_ampdu_action()
744 IWL_DEBUG_HT(priv, "stop Rx\n"); in iwlagn_mac_ampdu_action()
745 ret = iwl_sta_rx_agg_stop(priv, sta, tid); in iwlagn_mac_ampdu_action()
748 if (!priv->trans->ops->txq_enable) in iwlagn_mac_ampdu_action()
750 if (!iwl_enable_tx_ampdu(priv->cfg)) in iwlagn_mac_ampdu_action()
752 IWL_DEBUG_HT(priv, "start Tx\n"); in iwlagn_mac_ampdu_action()
753 ret = iwlagn_tx_agg_start(priv, vif, sta, tid, ssn); in iwlagn_mac_ampdu_action()
757 IWL_DEBUG_HT(priv, "Flush Tx\n"); in iwlagn_mac_ampdu_action()
758 ret = iwlagn_tx_agg_flush(priv, vif, sta, tid); in iwlagn_mac_ampdu_action()
761 IWL_DEBUG_HT(priv, "stop Tx\n"); in iwlagn_mac_ampdu_action()
762 ret = iwlagn_tx_agg_stop(priv, vif, sta, tid); in iwlagn_mac_ampdu_action()
763 if ((ret == 0) && (priv->agg_tids_count > 0)) { in iwlagn_mac_ampdu_action()
764 priv->agg_tids_count--; in iwlagn_mac_ampdu_action()
765 IWL_DEBUG_HT(priv, "priv->agg_tids_count = %u\n", in iwlagn_mac_ampdu_action()
766 priv->agg_tids_count); in iwlagn_mac_ampdu_action()
768 if (!priv->agg_tids_count && in iwlagn_mac_ampdu_action()
769 priv->hw_params.use_rts_for_aggregation) { in iwlagn_mac_ampdu_action()
775 iwl_send_lq_cmd(priv, iwl_rxon_ctx_from_vif(vif), in iwlagn_mac_ampdu_action()
780 ret = iwlagn_tx_agg_oper(priv, vif, sta, tid, buf_size); in iwlagn_mac_ampdu_action()
783 mutex_unlock(&priv->mutex); in iwlagn_mac_ampdu_action()
784 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_ampdu_action()
792 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_sta_add() local
799 IWL_DEBUG_INFO(priv, "proceeding to add station %pM\n", in iwlagn_mac_sta_add()
807 ret = iwl_add_station_common(priv, vif_priv->ctx, sta->addr, in iwlagn_mac_sta_add()
810 IWL_ERR(priv, "Unable to add station %pM (%d)\n", in iwlagn_mac_sta_add()
825 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_sta_remove() local
829 IWL_DEBUG_INFO(priv, "proceeding to remove station %pM\n", sta->addr); in iwlagn_mac_sta_remove()
838 iwl_deactivate_station(priv, sta_priv->sta_id, sta->addr); in iwlagn_mac_sta_remove()
840 ret = iwl_remove_station(priv, sta_priv->sta_id, sta->addr); in iwlagn_mac_sta_remove()
842 IWL_DEBUG_QUIET_RFKILL(priv, in iwlagn_mac_sta_remove()
854 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_sta_state() local
861 IWL_DEBUG_MAC80211(priv, "station %pM state change %d->%d\n", in iwlagn_mac_sta_state()
864 mutex_lock(&priv->mutex); in iwlagn_mac_sta_state()
895 spin_lock_bh(&priv->sta_lock); in iwlagn_mac_sta_state()
896 priv->stations[iwl_sta_id(sta)].used &= in iwlagn_mac_sta_state()
898 spin_unlock_bh(&priv->sta_lock); in iwlagn_mac_sta_state()
908 IWL_DEBUG_INFO(priv, in iwlagn_mac_sta_state()
911 iwl_rs_rate_init(priv, sta, iwl_sta_id(sta)); in iwlagn_mac_sta_state()
916 ret = iwl_sta_update_ht(priv, vif_priv->ctx, sta); in iwlagn_mac_sta_state()
919 IWL_DEBUG_INFO(priv, in iwlagn_mac_sta_state()
922 iwl_rs_rate_init(priv, sta, iwl_sta_id(sta)); in iwlagn_mac_sta_state()
934 if (iwl_is_rfkill(priv)) in iwlagn_mac_sta_state()
937 mutex_unlock(&priv->mutex); in iwlagn_mac_sta_state()
938 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_sta_state()
947 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_channel_switch() local
950 struct iwl_ht_config *ht_conf = &priv->current_ht_config; in iwlagn_mac_channel_switch()
959 struct iwl_rxon_context *ctx = &priv->contexts[IWL_RXON_CTX_BSS]; in iwlagn_mac_channel_switch()
962 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_channel_switch()
964 mutex_lock(&priv->mutex); in iwlagn_mac_channel_switch()
966 if (iwl_is_rfkill(priv)) in iwlagn_mac_channel_switch()
969 if (test_bit(STATUS_EXIT_PENDING, &priv->status) || in iwlagn_mac_channel_switch()
970 test_bit(STATUS_SCANNING, &priv->status) || in iwlagn_mac_channel_switch()
971 test_bit(STATUS_CHANNEL_SWITCH_PENDING, &priv->status)) in iwlagn_mac_channel_switch()
977 if (!priv->lib->set_channel_switch) in iwlagn_mac_channel_switch()
984 priv->current_ht_config.smps = conf->smps_mode; in iwlagn_mac_channel_switch()
1006 iwl_set_rxon_channel(priv, channel, ctx); in iwlagn_mac_channel_switch()
1007 iwl_set_rxon_ht(priv, ht_conf); in iwlagn_mac_channel_switch()
1008 iwl_set_flags_for_band(priv, ctx, channel->band, ctx->vif); in iwlagn_mac_channel_switch()
1014 set_bit(STATUS_CHANNEL_SWITCH_PENDING, &priv->status); in iwlagn_mac_channel_switch()
1015 priv->switch_channel = cpu_to_le16(ch); in iwlagn_mac_channel_switch()
1016 if (priv->lib->set_channel_switch(priv, ch_switch)) { in iwlagn_mac_channel_switch()
1017 clear_bit(STATUS_CHANNEL_SWITCH_PENDING, &priv->status); in iwlagn_mac_channel_switch()
1018 priv->switch_channel = 0; in iwlagn_mac_channel_switch()
1023 mutex_unlock(&priv->mutex); in iwlagn_mac_channel_switch()
1024 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_channel_switch()
1027 void iwl_chswitch_done(struct iwl_priv *priv, bool is_success) in iwl_chswitch_done() argument
1033 struct iwl_rxon_context *ctx = &priv->contexts[IWL_RXON_CTX_BSS]; in iwl_chswitch_done()
1035 if (test_bit(STATUS_EXIT_PENDING, &priv->status)) in iwl_chswitch_done()
1038 if (!test_and_clear_bit(STATUS_CHANNEL_SWITCH_PENDING, &priv->status)) in iwl_chswitch_done()
1050 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_configure_filter() local
1061 IWL_DEBUG_MAC80211(priv, "Enter: changed: 0x%x, total: 0x%x\n", in iwlagn_configure_filter()
1071 mutex_lock(&priv->mutex); in iwlagn_configure_filter()
1073 for_each_context(priv, ctx) { in iwlagn_configure_filter()
1083 mutex_unlock(&priv->mutex); in iwlagn_configure_filter()
1098 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_flush() local
1101 mutex_lock(&priv->mutex); in iwlagn_mac_flush()
1102 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_flush()
1104 if (test_bit(STATUS_EXIT_PENDING, &priv->status)) { in iwlagn_mac_flush()
1105 IWL_DEBUG_TX(priv, "Aborting flush due to device shutdown\n"); in iwlagn_mac_flush()
1108 if (iwl_is_rfkill(priv)) { in iwlagn_mac_flush()
1109 IWL_DEBUG_TX(priv, "Aborting flush due to RF Kill\n"); in iwlagn_mac_flush()
1113 scd_queues = BIT(priv->cfg->base_params->num_of_queues) - 1; in iwlagn_mac_flush()
1118 IWL_DEBUG_TX_QUEUES(priv, "Flushing SCD queues: 0x%x\n", in iwlagn_mac_flush()
1120 if (iwlagn_txfifo_flush(priv, scd_queues)) { in iwlagn_mac_flush()
1121 IWL_ERR(priv, "flush request fail\n"); in iwlagn_mac_flush()
1126 IWL_DEBUG_TX_QUEUES(priv, "wait transmit/flush all frames\n"); in iwlagn_mac_flush()
1127 iwl_trans_wait_tx_queue_empty(priv->trans, scd_queues); in iwlagn_mac_flush()
1129 mutex_unlock(&priv->mutex); in iwlagn_mac_flush()
1130 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_flush()
1137 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_event_callback() local
1142 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_event_callback()
1143 mutex_lock(&priv->mutex); in iwlagn_mac_event_callback()
1145 if (priv->lib->bt_params && in iwlagn_mac_event_callback()
1146 priv->lib->bt_params->advanced_bt_coexist) { in iwlagn_mac_event_callback()
1148 priv->bt_enable_pspoll = true; in iwlagn_mac_event_callback()
1150 priv->bt_enable_pspoll = false; in iwlagn_mac_event_callback()
1152 iwlagn_send_advance_bt_config(priv); in iwlagn_mac_event_callback()
1154 IWL_DEBUG_MAC80211(priv, "Advanced BT coex disabled," in iwlagn_mac_event_callback()
1158 mutex_unlock(&priv->mutex); in iwlagn_mac_event_callback()
1159 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_event_callback()
1165 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_set_tim() local
1167 queue_work(priv->workqueue, &priv->beacon_update); in iwlagn_mac_set_tim()
1176 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_conf_tx() local
1184 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_conf_tx()
1186 if (!iwl_is_ready_rf(priv)) { in iwlagn_mac_conf_tx()
1187 IWL_DEBUG_MAC80211(priv, "leave - RF not ready\n"); in iwlagn_mac_conf_tx()
1192 IWL_DEBUG_MAC80211(priv, "leave - queue >= AC_NUM %d\n", queue); in iwlagn_mac_conf_tx()
1198 mutex_lock(&priv->mutex); in iwlagn_mac_conf_tx()
1210 mutex_unlock(&priv->mutex); in iwlagn_mac_conf_tx()
1212 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_conf_tx()
1218 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_tx_last_beacon() local
1220 return priv->ibss_manager == IWL_IBSS_MANAGER; in iwlagn_mac_tx_last_beacon()
1223 static int iwl_set_mode(struct iwl_priv *priv, struct iwl_rxon_context *ctx) in iwl_set_mode() argument
1225 iwl_connection_init_rx_config(priv, ctx); in iwl_set_mode()
1227 iwlagn_set_rxon_chain(priv, ctx); in iwl_set_mode()
1229 return iwlagn_commit_rxon(priv, ctx); in iwl_set_mode()
1232 static int iwl_setup_interface(struct iwl_priv *priv, in iwl_setup_interface() argument
1238 lockdep_assert_held(&priv->mutex); in iwl_setup_interface()
1245 priv->iw_mode = vif->type; in iwl_setup_interface()
1249 err = iwl_set_mode(priv, ctx); in iwl_setup_interface()
1256 if (priv->lib->bt_params && priv->lib->bt_params->advanced_bt_coexist && in iwl_setup_interface()
1263 priv->bt_traffic_load = IWL_BT_COEX_TRAFFIC_LOAD_HIGH; in iwl_setup_interface()
1281 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_add_interface() local
1288 IWL_DEBUG_MAC80211(priv, "enter: type %d, addr %pM\n", in iwlagn_mac_add_interface()
1291 mutex_lock(&priv->mutex); in iwlagn_mac_add_interface()
1293 if (!iwl_is_ready_rf(priv)) { in iwlagn_mac_add_interface()
1294 IWL_WARN(priv, "Try to add interface when device not ready\n"); in iwlagn_mac_add_interface()
1299 for_each_context(priv, tmp) { in iwlagn_mac_add_interface()
1346 priv->hw->flags |= IEEE80211_HW_RX_INCLUDES_FCS; in iwlagn_mac_add_interface()
1348 priv->hw->flags &= ~IEEE80211_HW_RX_INCLUDES_FCS; in iwlagn_mac_add_interface()
1350 err = iwl_setup_interface(priv, ctx); in iwlagn_mac_add_interface()
1355 priv->iw_mode = NL80211_IFTYPE_STATION; in iwlagn_mac_add_interface()
1357 mutex_unlock(&priv->mutex); in iwlagn_mac_add_interface()
1359 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_add_interface()
1363 static void iwl_teardown_interface(struct iwl_priv *priv, in iwl_teardown_interface() argument
1369 lockdep_assert_held(&priv->mutex); in iwl_teardown_interface()
1371 if (priv->scan_vif == vif) { in iwl_teardown_interface()
1372 iwl_scan_cancel_timeout(priv, 200); in iwl_teardown_interface()
1373 iwl_force_scan_end(priv); in iwl_teardown_interface()
1377 iwl_set_mode(priv, ctx); in iwl_teardown_interface()
1390 priv->bt_traffic_load = priv->last_bt_traffic_load; in iwl_teardown_interface()
1396 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_remove_interface() local
1399 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_remove_interface()
1401 mutex_lock(&priv->mutex); in iwlagn_mac_remove_interface()
1405 IWL_ERR(priv, "ctx->vif = %p, vif = %p\n", ctx->vif, vif); in iwlagn_mac_remove_interface()
1406 for_each_context(priv, tmp) in iwlagn_mac_remove_interface()
1407 IWL_ERR(priv, "\tID = %d:\tctx = %p\tctx->vif = %p\n", in iwlagn_mac_remove_interface()
1412 iwl_teardown_interface(priv, vif, false); in iwlagn_mac_remove_interface()
1414 mutex_unlock(&priv->mutex); in iwlagn_mac_remove_interface()
1416 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_remove_interface()
1424 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_change_interface() local
1430 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_change_interface()
1434 mutex_lock(&priv->mutex); in iwlagn_mac_change_interface()
1448 if (!ctx->vif || !iwl_is_ready_rf(priv)) { in iwlagn_mac_change_interface()
1465 for_each_context(priv, tmp) { in iwlagn_mac_change_interface()
1482 iwl_teardown_interface(priv, vif, true); in iwlagn_mac_change_interface()
1485 err = iwl_setup_interface(priv, ctx); in iwlagn_mac_change_interface()
1497 mutex_unlock(&priv->mutex); in iwlagn_mac_change_interface()
1498 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_change_interface()
1507 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_hw_scan() local
1511 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_hw_scan()
1516 mutex_lock(&priv->mutex); in iwlagn_mac_hw_scan()
1522 if (priv->scan_type != IWL_SCAN_NORMAL) { in iwlagn_mac_hw_scan()
1523 IWL_DEBUG_SCAN(priv, in iwlagn_mac_hw_scan()
1525 priv->scan_request = req; in iwlagn_mac_hw_scan()
1526 priv->scan_vif = vif; in iwlagn_mac_hw_scan()
1529 priv->scan_request = req; in iwlagn_mac_hw_scan()
1530 priv->scan_vif = vif; in iwlagn_mac_hw_scan()
1535 ret = iwl_scan_initiate(priv, vif, IWL_SCAN_NORMAL, in iwlagn_mac_hw_scan()
1538 priv->scan_request = NULL; in iwlagn_mac_hw_scan()
1539 priv->scan_vif = NULL; in iwlagn_mac_hw_scan()
1543 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_hw_scan()
1545 mutex_unlock(&priv->mutex); in iwlagn_mac_hw_scan()
1550 static void iwl_sta_modify_ps_wake(struct iwl_priv *priv, int sta_id) in iwl_sta_modify_ps_wake() argument
1558 iwl_send_add_sta(priv, &cmd, CMD_ASYNC); in iwl_sta_modify_ps_wake()
1566 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_sta_notify() local
1570 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_sta_notify()
1586 iwl_sta_modify_ps_wake(priv, sta_id); in iwlagn_mac_sta_notify()
1591 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_sta_notify()
1627 struct iwl_priv *priv; in iwl_alloc_all() local
1638 op_mode = hw->priv; in iwl_alloc_all()
1639 priv = IWL_OP_MODE_GET_DVM(op_mode); in iwl_alloc_all()
1640 priv->hw = hw; in iwl_alloc_all()