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()
128 if (priv->nvm_data->sku_cap_11n_enable) in iwlagn_mac_setup_register()
137 if (priv->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_MFP && in iwlagn_mac_setup_register()
144 for_each_context(priv, ctx) { in iwlagn_mac_setup_register()
163 if (priv->fw->img[IWL_UCODE_WOWLAN].sec[0].len && in iwlagn_mac_setup_register()
164 priv->trans->ops->d3_suspend && in iwlagn_mac_setup_register()
165 priv->trans->ops->d3_resume && in iwlagn_mac_setup_register()
166 device_can_wakeup(priv->trans->dev)) { in iwlagn_mac_setup_register()
167 priv->wowlan_support.flags = WIPHY_WOWLAN_MAGIC_PKT | in iwlagn_mac_setup_register()
172 priv->wowlan_support.flags |= in iwlagn_mac_setup_register()
176 priv->wowlan_support.n_patterns = IWLAGN_WOWLAN_MAX_PATTERNS; in iwlagn_mac_setup_register()
177 priv->wowlan_support.pattern_min_len = in iwlagn_mac_setup_register()
179 priv->wowlan_support.pattern_max_len = in iwlagn_mac_setup_register()
181 hw->wiphy->wowlan = &priv->wowlan_support; in iwlagn_mac_setup_register()
202 if (priv->nvm_data->bands[IEEE80211_BAND_2GHZ].n_channels) in iwlagn_mac_setup_register()
203 priv->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = in iwlagn_mac_setup_register()
204 &priv->nvm_data->bands[IEEE80211_BAND_2GHZ]; in iwlagn_mac_setup_register()
205 if (priv->nvm_data->bands[IEEE80211_BAND_5GHZ].n_channels) in iwlagn_mac_setup_register()
206 priv->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = in iwlagn_mac_setup_register()
207 &priv->nvm_data->bands[IEEE80211_BAND_5GHZ]; in iwlagn_mac_setup_register()
209 hw->wiphy->hw_version = priv->trans->hw_id; in iwlagn_mac_setup_register()
211 iwl_leds_init(priv); in iwlagn_mac_setup_register()
213 ret = ieee80211_register_hw(priv->hw); in iwlagn_mac_setup_register()
215 IWL_ERR(priv, "Failed to register hw (error %d)\n", ret); in iwlagn_mac_setup_register()
216 iwl_leds_exit(priv); in iwlagn_mac_setup_register()
219 priv->mac80211_registered = 1; in iwlagn_mac_setup_register()
224 void iwlagn_mac_unregister(struct iwl_priv *priv) in iwlagn_mac_unregister() argument
226 if (!priv->mac80211_registered) in iwlagn_mac_unregister()
228 iwl_leds_exit(priv); in iwlagn_mac_unregister()
229 ieee80211_unregister_hw(priv->hw); in iwlagn_mac_unregister()
230 priv->mac80211_registered = 0; in iwlagn_mac_unregister()
233 static int __iwl_up(struct iwl_priv *priv) in __iwl_up() argument
238 lockdep_assert_held(&priv->mutex); in __iwl_up()
240 if (test_bit(STATUS_EXIT_PENDING, &priv->status)) { in __iwl_up()
241 IWL_WARN(priv, "Exit pending; will not bring the NIC up\n"); in __iwl_up()
245 for_each_context(priv, ctx) { in __iwl_up()
246 ret = iwlagn_alloc_bcast_station(priv, ctx); in __iwl_up()
248 iwl_dealloc_bcast_stations(priv); in __iwl_up()
253 ret = iwl_trans_start_hw(priv->trans); in __iwl_up()
255 IWL_ERR(priv, "Failed to start HW: %d\n", ret); in __iwl_up()
259 ret = iwl_run_init_ucode(priv); in __iwl_up()
261 IWL_ERR(priv, "Failed to run INIT ucode: %d\n", ret); in __iwl_up()
265 ret = iwl_trans_start_hw(priv->trans); in __iwl_up()
267 IWL_ERR(priv, "Failed to start HW: %d\n", ret); in __iwl_up()
271 ret = iwl_load_ucode_wait_alive(priv, IWL_UCODE_REGULAR); in __iwl_up()
273 IWL_ERR(priv, "Failed to start RT ucode: %d\n", ret); in __iwl_up()
277 ret = iwl_alive_start(priv); in __iwl_up()
283 set_bit(STATUS_EXIT_PENDING, &priv->status); in __iwl_up()
284 iwl_down(priv); in __iwl_up()
285 clear_bit(STATUS_EXIT_PENDING, &priv->status); in __iwl_up()
287 IWL_ERR(priv, "Unable to initialize device.\n"); in __iwl_up()
293 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_start() local
296 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_start()
299 mutex_lock(&priv->mutex); in iwlagn_mac_start()
300 ret = __iwl_up(priv); in iwlagn_mac_start()
301 mutex_unlock(&priv->mutex); in iwlagn_mac_start()
305 IWL_DEBUG_INFO(priv, "Start UP work done.\n"); in iwlagn_mac_start()
308 if (WARN_ON(!test_bit(STATUS_READY, &priv->status))) in iwlagn_mac_start()
311 iwlagn_led_enable(priv); in iwlagn_mac_start()
313 priv->is_open = 1; in iwlagn_mac_start()
314 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_start()
320 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_stop() local
322 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_stop()
324 if (!priv->is_open) in iwlagn_mac_stop()
327 priv->is_open = 0; in iwlagn_mac_stop()
329 mutex_lock(&priv->mutex); in iwlagn_mac_stop()
330 iwl_down(priv); in iwlagn_mac_stop()
331 mutex_unlock(&priv->mutex); in iwlagn_mac_stop()
333 iwl_cancel_deferred_work(priv); in iwlagn_mac_stop()
335 flush_workqueue(priv->workqueue); in iwlagn_mac_stop()
337 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_stop()
344 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_set_rekey_data() local
349 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_set_rekey_data()
350 mutex_lock(&priv->mutex); in iwlagn_mac_set_rekey_data()
352 if (priv->contexts[IWL_RXON_CTX_BSS].vif != vif) in iwlagn_mac_set_rekey_data()
355 memcpy(priv->kek, data->kek, NL80211_KEK_LEN); in iwlagn_mac_set_rekey_data()
356 memcpy(priv->kck, data->kck, NL80211_KCK_LEN); in iwlagn_mac_set_rekey_data()
357 priv->replay_ctr = in iwlagn_mac_set_rekey_data()
359 priv->have_rekey_data = true; in iwlagn_mac_set_rekey_data()
362 mutex_unlock(&priv->mutex); in iwlagn_mac_set_rekey_data()
363 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_set_rekey_data()
371 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_suspend() local
372 struct iwl_rxon_context *ctx = &priv->contexts[IWL_RXON_CTX_BSS]; in iwlagn_mac_suspend()
378 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_suspend()
379 mutex_lock(&priv->mutex); in iwlagn_mac_suspend()
388 ret = iwlagn_suspend(priv, wowlan); in iwlagn_mac_suspend()
393 iwl_write32(priv->trans, CSR_UCODE_DRV_GP1_SET, in iwlagn_mac_suspend()
396 iwl_trans_d3_suspend(priv->trans, false); in iwlagn_mac_suspend()
401 priv->wowlan = false; in iwlagn_mac_suspend()
402 iwlagn_prepare_restart(priv); in iwlagn_mac_suspend()
403 ieee80211_restart_hw(priv->hw); in iwlagn_mac_suspend()
405 mutex_unlock(&priv->mutex); in iwlagn_mac_suspend()
406 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_suspend()
412 struct iwl_priv *priv; member
421 struct iwl_priv *priv = resume_data->priv; in iwl_resume_status_fn() local
424 IWL_ERR(priv, "rx wrong size data\n"); in iwl_resume_status_fn()
435 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_resume() local
436 struct iwl_rxon_context *ctx = &priv->contexts[IWL_RXON_CTX_BSS]; in iwlagn_mac_resume()
452 .priv = priv, in iwlagn_mac_resume()
463 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_resume()
464 mutex_lock(&priv->mutex); in iwlagn_mac_resume()
469 ret = iwl_trans_d3_resume(priv->trans, &d3_status, false); in iwlagn_mac_resume()
474 IWL_INFO(priv, "Device was reset during suspend\n"); in iwlagn_mac_resume()
479 iwl_write32(priv->trans, CSR_UCODE_DRV_GP1_CLR, in iwlagn_mac_resume()
482 base = priv->device_pointers.error_event_table; in iwlagn_mac_resume()
484 IWL_WARN(priv, "Invalid error table during resume!\n"); in iwlagn_mac_resume()
488 iwl_trans_read_mem_bytes(priv->trans, base, in iwlagn_mac_resume()
492 IWL_INFO(priv, "error table is valid (%d, 0x%x)\n", in iwlagn_mac_resume()
503 img = &priv->fw->img[IWL_UCODE_WOWLAN]; in iwlagn_mac_resume()
504 if (!priv->wowlan_sram) in iwlagn_mac_resume()
505 priv->wowlan_sram = in iwlagn_mac_resume()
509 if (priv->wowlan_sram) in iwlagn_mac_resume()
510 iwl_trans_read_mem(priv->trans, 0x800000, in iwlagn_mac_resume()
511 priv->wowlan_sram, in iwlagn_mac_resume()
523 iwl_init_notification_wait(&priv->notif_wait, &status_wait, status_cmd, in iwlagn_mac_resume()
527 iwl_dvm_send_cmd_pdu(priv, REPLY_WOWLAN_GET_STATUS, CMD_ASYNC, 0, NULL); in iwlagn_mac_resume()
528 iwl_dvm_send_cmd_pdu(priv, REPLY_ECHO, CMD_ASYNC, 0, NULL); in iwlagn_mac_resume()
531 ret = iwl_wait_notification(&priv->notif_wait, &status_wait, HZ/5); in iwlagn_mac_resume()
535 if (resume_data.valid && priv->contexts[IWL_RXON_CTX_BSS].vif) { in iwlagn_mac_resume()
539 IWL_INFO(priv, "WoWLAN wakeup reason(s): 0x%.8x\n", reasons); in iwlagn_mac_resume()
563 priv->wowlan = false; in iwlagn_mac_resume()
565 iwlagn_prepare_restart(priv); in iwlagn_mac_resume()
568 iwl_connection_init_rx_config(priv, ctx); in iwlagn_mac_resume()
569 iwlagn_set_rxon_chain(priv, ctx); in iwlagn_mac_resume()
572 mutex_unlock(&priv->mutex); in iwlagn_mac_resume()
573 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_resume()
582 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_set_wakeup() local
584 device_set_wakeup_enable(priv->trans->dev, enabled); in iwlagn_mac_set_wakeup()
592 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_tx() local
594 if (iwlagn_tx_skb(priv, control->sta, skb)) in iwlagn_mac_tx()
604 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_update_tkip_key() local
606 iwl_update_tkip_key(priv, vif, keyconf, sta, iv32, phase1key); in iwlagn_mac_update_tkip_key()
614 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_set_key() local
620 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_set_key()
623 IWL_DEBUG_MAC80211(priv, "leave - hwcrypto disabled\n"); in iwlagn_mac_set_key()
655 mutex_lock(&priv->mutex); in iwlagn_mac_set_key()
656 iwl_scan_cancel_timeout(priv, 100); in iwlagn_mac_set_key()
679 ret = iwl_set_default_wep_key(priv, vif_priv->ctx, key); in iwlagn_mac_set_key()
682 ret = iwl_set_dynamic_key(priv, vif_priv->ctx, key, sta); in iwlagn_mac_set_key()
692 IWL_DEBUG_MAC80211(priv, "enable hwcrypto key\n"); in iwlagn_mac_set_key()
696 ret = iwl_remove_default_wep_key(priv, ctx, key); in iwlagn_mac_set_key()
698 ret = iwl_remove_dynamic_key(priv, ctx, key, sta); in iwlagn_mac_set_key()
700 IWL_DEBUG_MAC80211(priv, "disable hwcrypto key\n"); in iwlagn_mac_set_key()
706 mutex_unlock(&priv->mutex); in iwlagn_mac_set_key()
707 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_set_key()
736 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_ampdu_action() local
740 IWL_DEBUG_HT(priv, "A-MPDU action on addr %pM tid %d\n", in iwlagn_mac_ampdu_action()
743 if (!(priv->nvm_data->sku_cap_11n_enable)) in iwlagn_mac_ampdu_action()
746 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_ampdu_action()
747 mutex_lock(&priv->mutex); in iwlagn_mac_ampdu_action()
751 if (!iwl_enable_rx_ampdu(priv->cfg)) in iwlagn_mac_ampdu_action()
753 IWL_DEBUG_HT(priv, "start Rx\n"); in iwlagn_mac_ampdu_action()
754 ret = iwl_sta_rx_agg_start(priv, sta, tid, *ssn); in iwlagn_mac_ampdu_action()
757 IWL_DEBUG_HT(priv, "stop Rx\n"); in iwlagn_mac_ampdu_action()
758 ret = iwl_sta_rx_agg_stop(priv, sta, tid); in iwlagn_mac_ampdu_action()
761 if (!priv->trans->ops->txq_enable) in iwlagn_mac_ampdu_action()
763 if (!iwl_enable_tx_ampdu(priv->cfg)) in iwlagn_mac_ampdu_action()
765 IWL_DEBUG_HT(priv, "start Tx\n"); in iwlagn_mac_ampdu_action()
766 ret = iwlagn_tx_agg_start(priv, vif, sta, tid, ssn); in iwlagn_mac_ampdu_action()
770 IWL_DEBUG_HT(priv, "Flush Tx\n"); in iwlagn_mac_ampdu_action()
771 ret = iwlagn_tx_agg_flush(priv, vif, sta, tid); in iwlagn_mac_ampdu_action()
774 IWL_DEBUG_HT(priv, "stop Tx\n"); in iwlagn_mac_ampdu_action()
775 ret = iwlagn_tx_agg_stop(priv, vif, sta, tid); in iwlagn_mac_ampdu_action()
776 if ((ret == 0) && (priv->agg_tids_count > 0)) { in iwlagn_mac_ampdu_action()
777 priv->agg_tids_count--; in iwlagn_mac_ampdu_action()
778 IWL_DEBUG_HT(priv, "priv->agg_tids_count = %u\n", in iwlagn_mac_ampdu_action()
779 priv->agg_tids_count); in iwlagn_mac_ampdu_action()
781 if (!priv->agg_tids_count && in iwlagn_mac_ampdu_action()
782 priv->hw_params.use_rts_for_aggregation) { in iwlagn_mac_ampdu_action()
788 iwl_send_lq_cmd(priv, iwl_rxon_ctx_from_vif(vif), in iwlagn_mac_ampdu_action()
793 ret = iwlagn_tx_agg_oper(priv, vif, sta, tid, buf_size); in iwlagn_mac_ampdu_action()
796 mutex_unlock(&priv->mutex); in iwlagn_mac_ampdu_action()
797 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_ampdu_action()
805 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_sta_add() local
812 IWL_DEBUG_INFO(priv, "proceeding to add station %pM\n", in iwlagn_mac_sta_add()
820 ret = iwl_add_station_common(priv, vif_priv->ctx, sta->addr, in iwlagn_mac_sta_add()
823 IWL_ERR(priv, "Unable to add station %pM (%d)\n", in iwlagn_mac_sta_add()
838 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_sta_remove() local
842 IWL_DEBUG_INFO(priv, "proceeding to remove station %pM\n", sta->addr); in iwlagn_mac_sta_remove()
851 iwl_deactivate_station(priv, sta_priv->sta_id, sta->addr); in iwlagn_mac_sta_remove()
853 ret = iwl_remove_station(priv, sta_priv->sta_id, sta->addr); in iwlagn_mac_sta_remove()
855 IWL_DEBUG_QUIET_RFKILL(priv, in iwlagn_mac_sta_remove()
867 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_sta_state() local
874 IWL_DEBUG_MAC80211(priv, "station %pM state change %d->%d\n", in iwlagn_mac_sta_state()
877 mutex_lock(&priv->mutex); in iwlagn_mac_sta_state()
908 spin_lock_bh(&priv->sta_lock); in iwlagn_mac_sta_state()
909 priv->stations[iwl_sta_id(sta)].used &= in iwlagn_mac_sta_state()
911 spin_unlock_bh(&priv->sta_lock); in iwlagn_mac_sta_state()
921 IWL_DEBUG_INFO(priv, in iwlagn_mac_sta_state()
924 iwl_rs_rate_init(priv, sta, iwl_sta_id(sta)); in iwlagn_mac_sta_state()
929 ret = iwl_sta_update_ht(priv, vif_priv->ctx, sta); in iwlagn_mac_sta_state()
932 IWL_DEBUG_INFO(priv, in iwlagn_mac_sta_state()
935 iwl_rs_rate_init(priv, sta, iwl_sta_id(sta)); in iwlagn_mac_sta_state()
947 if (iwl_is_rfkill(priv)) in iwlagn_mac_sta_state()
950 mutex_unlock(&priv->mutex); in iwlagn_mac_sta_state()
951 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_sta_state()
960 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_channel_switch() local
963 struct iwl_ht_config *ht_conf = &priv->current_ht_config; in iwlagn_mac_channel_switch()
972 struct iwl_rxon_context *ctx = &priv->contexts[IWL_RXON_CTX_BSS]; in iwlagn_mac_channel_switch()
975 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_channel_switch()
977 mutex_lock(&priv->mutex); in iwlagn_mac_channel_switch()
979 if (iwl_is_rfkill(priv)) in iwlagn_mac_channel_switch()
982 if (test_bit(STATUS_EXIT_PENDING, &priv->status) || in iwlagn_mac_channel_switch()
983 test_bit(STATUS_SCANNING, &priv->status) || in iwlagn_mac_channel_switch()
984 test_bit(STATUS_CHANNEL_SWITCH_PENDING, &priv->status)) in iwlagn_mac_channel_switch()
990 if (!priv->lib->set_channel_switch) in iwlagn_mac_channel_switch()
997 priv->current_ht_config.smps = conf->smps_mode; in iwlagn_mac_channel_switch()
1019 iwl_set_rxon_channel(priv, channel, ctx); in iwlagn_mac_channel_switch()
1020 iwl_set_rxon_ht(priv, ht_conf); in iwlagn_mac_channel_switch()
1021 iwl_set_flags_for_band(priv, ctx, channel->band, ctx->vif); in iwlagn_mac_channel_switch()
1027 set_bit(STATUS_CHANNEL_SWITCH_PENDING, &priv->status); in iwlagn_mac_channel_switch()
1028 priv->switch_channel = cpu_to_le16(ch); in iwlagn_mac_channel_switch()
1029 if (priv->lib->set_channel_switch(priv, ch_switch)) { in iwlagn_mac_channel_switch()
1030 clear_bit(STATUS_CHANNEL_SWITCH_PENDING, &priv->status); in iwlagn_mac_channel_switch()
1031 priv->switch_channel = 0; in iwlagn_mac_channel_switch()
1036 mutex_unlock(&priv->mutex); in iwlagn_mac_channel_switch()
1037 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_channel_switch()
1040 void iwl_chswitch_done(struct iwl_priv *priv, bool is_success) in iwl_chswitch_done() argument
1046 struct iwl_rxon_context *ctx = &priv->contexts[IWL_RXON_CTX_BSS]; in iwl_chswitch_done()
1048 if (test_bit(STATUS_EXIT_PENDING, &priv->status)) in iwl_chswitch_done()
1051 if (!test_and_clear_bit(STATUS_CHANNEL_SWITCH_PENDING, &priv->status)) in iwl_chswitch_done()
1063 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_configure_filter() local
1074 IWL_DEBUG_MAC80211(priv, "Enter: changed: 0x%x, total: 0x%x\n", in iwlagn_configure_filter()
1084 mutex_lock(&priv->mutex); in iwlagn_configure_filter()
1086 for_each_context(priv, ctx) { in iwlagn_configure_filter()
1096 mutex_unlock(&priv->mutex); in iwlagn_configure_filter()
1111 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_flush() local
1114 mutex_lock(&priv->mutex); in iwlagn_mac_flush()
1115 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_flush()
1117 if (test_bit(STATUS_EXIT_PENDING, &priv->status)) { in iwlagn_mac_flush()
1118 IWL_DEBUG_TX(priv, "Aborting flush due to device shutdown\n"); in iwlagn_mac_flush()
1121 if (iwl_is_rfkill(priv)) { in iwlagn_mac_flush()
1122 IWL_DEBUG_TX(priv, "Aborting flush due to RF Kill\n"); in iwlagn_mac_flush()
1126 scd_queues = BIT(priv->cfg->base_params->num_of_queues) - 1; in iwlagn_mac_flush()
1131 IWL_DEBUG_TX_QUEUES(priv, "Flushing SCD queues: 0x%x\n", in iwlagn_mac_flush()
1133 if (iwlagn_txfifo_flush(priv, scd_queues)) { in iwlagn_mac_flush()
1134 IWL_ERR(priv, "flush request fail\n"); in iwlagn_mac_flush()
1139 IWL_DEBUG_TX_QUEUES(priv, "wait transmit/flush all frames\n"); in iwlagn_mac_flush()
1140 iwl_trans_wait_tx_queue_empty(priv->trans, scd_queues); in iwlagn_mac_flush()
1142 mutex_unlock(&priv->mutex); in iwlagn_mac_flush()
1143 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_flush()
1150 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_event_callback() local
1155 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_event_callback()
1157 if (priv->lib->bt_params && in iwlagn_mac_event_callback()
1158 priv->lib->bt_params->advanced_bt_coexist) { in iwlagn_mac_event_callback()
1160 priv->bt_enable_pspoll = true; in iwlagn_mac_event_callback()
1162 priv->bt_enable_pspoll = false; in iwlagn_mac_event_callback()
1164 queue_work(priv->workqueue, &priv->bt_runtime_config); in iwlagn_mac_event_callback()
1166 IWL_DEBUG_MAC80211(priv, "Advanced BT coex disabled," in iwlagn_mac_event_callback()
1170 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_event_callback()
1176 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_set_tim() local
1178 queue_work(priv->workqueue, &priv->beacon_update); in iwlagn_mac_set_tim()
1187 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_conf_tx() local
1195 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_conf_tx()
1197 if (!iwl_is_ready_rf(priv)) { in iwlagn_mac_conf_tx()
1198 IWL_DEBUG_MAC80211(priv, "leave - RF not ready\n"); in iwlagn_mac_conf_tx()
1203 IWL_DEBUG_MAC80211(priv, "leave - queue >= AC_NUM %d\n", queue); in iwlagn_mac_conf_tx()
1209 mutex_lock(&priv->mutex); in iwlagn_mac_conf_tx()
1221 mutex_unlock(&priv->mutex); in iwlagn_mac_conf_tx()
1223 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_conf_tx()
1229 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_tx_last_beacon() local
1231 return priv->ibss_manager == IWL_IBSS_MANAGER; in iwlagn_mac_tx_last_beacon()
1234 static int iwl_set_mode(struct iwl_priv *priv, struct iwl_rxon_context *ctx) in iwl_set_mode() argument
1236 iwl_connection_init_rx_config(priv, ctx); in iwl_set_mode()
1238 iwlagn_set_rxon_chain(priv, ctx); in iwl_set_mode()
1240 return iwlagn_commit_rxon(priv, ctx); in iwl_set_mode()
1243 static int iwl_setup_interface(struct iwl_priv *priv, in iwl_setup_interface() argument
1249 lockdep_assert_held(&priv->mutex); in iwl_setup_interface()
1256 priv->iw_mode = vif->type; in iwl_setup_interface()
1260 err = iwl_set_mode(priv, ctx); in iwl_setup_interface()
1267 if (priv->lib->bt_params && priv->lib->bt_params->advanced_bt_coexist && in iwl_setup_interface()
1274 priv->bt_traffic_load = IWL_BT_COEX_TRAFFIC_LOAD_HIGH; in iwl_setup_interface()
1292 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_add_interface() local
1299 IWL_DEBUG_MAC80211(priv, "enter: type %d, addr %pM\n", in iwlagn_mac_add_interface()
1302 mutex_lock(&priv->mutex); in iwlagn_mac_add_interface()
1304 if (!iwl_is_ready_rf(priv)) { in iwlagn_mac_add_interface()
1305 IWL_WARN(priv, "Try to add interface when device not ready\n"); in iwlagn_mac_add_interface()
1310 for_each_context(priv, tmp) { in iwlagn_mac_add_interface()
1357 ieee80211_hw_set(priv->hw, RX_INCLUDES_FCS); in iwlagn_mac_add_interface()
1359 __clear_bit(IEEE80211_HW_RX_INCLUDES_FCS, priv->hw->flags); in iwlagn_mac_add_interface()
1361 err = iwl_setup_interface(priv, ctx); in iwlagn_mac_add_interface()
1366 priv->iw_mode = NL80211_IFTYPE_STATION; in iwlagn_mac_add_interface()
1368 mutex_unlock(&priv->mutex); in iwlagn_mac_add_interface()
1370 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_add_interface()
1374 static void iwl_teardown_interface(struct iwl_priv *priv, in iwl_teardown_interface() argument
1380 lockdep_assert_held(&priv->mutex); in iwl_teardown_interface()
1382 if (priv->scan_vif == vif) { in iwl_teardown_interface()
1383 iwl_scan_cancel_timeout(priv, 200); in iwl_teardown_interface()
1384 iwl_force_scan_end(priv); in iwl_teardown_interface()
1388 iwl_set_mode(priv, ctx); in iwl_teardown_interface()
1401 priv->bt_traffic_load = priv->last_bt_traffic_load; in iwl_teardown_interface()
1407 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_remove_interface() local
1410 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_remove_interface()
1412 mutex_lock(&priv->mutex); in iwlagn_mac_remove_interface()
1416 IWL_ERR(priv, "ctx->vif = %p, vif = %p\n", ctx->vif, vif); in iwlagn_mac_remove_interface()
1417 for_each_context(priv, tmp) in iwlagn_mac_remove_interface()
1418 IWL_ERR(priv, "\tID = %d:\tctx = %p\tctx->vif = %p\n", in iwlagn_mac_remove_interface()
1423 iwl_teardown_interface(priv, vif, false); in iwlagn_mac_remove_interface()
1425 mutex_unlock(&priv->mutex); in iwlagn_mac_remove_interface()
1427 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_remove_interface()
1435 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_change_interface() local
1441 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_change_interface()
1445 mutex_lock(&priv->mutex); in iwlagn_mac_change_interface()
1459 if (!ctx->vif || !iwl_is_ready_rf(priv)) { in iwlagn_mac_change_interface()
1476 for_each_context(priv, tmp) { in iwlagn_mac_change_interface()
1493 iwl_teardown_interface(priv, vif, true); in iwlagn_mac_change_interface()
1496 err = iwl_setup_interface(priv, ctx); in iwlagn_mac_change_interface()
1508 mutex_unlock(&priv->mutex); in iwlagn_mac_change_interface()
1509 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_change_interface()
1518 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_hw_scan() local
1522 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_hw_scan()
1527 mutex_lock(&priv->mutex); in iwlagn_mac_hw_scan()
1533 if (priv->scan_type != IWL_SCAN_NORMAL) { in iwlagn_mac_hw_scan()
1534 IWL_DEBUG_SCAN(priv, in iwlagn_mac_hw_scan()
1536 priv->scan_request = req; in iwlagn_mac_hw_scan()
1537 priv->scan_vif = vif; in iwlagn_mac_hw_scan()
1540 priv->scan_request = req; in iwlagn_mac_hw_scan()
1541 priv->scan_vif = vif; in iwlagn_mac_hw_scan()
1546 ret = iwl_scan_initiate(priv, vif, IWL_SCAN_NORMAL, in iwlagn_mac_hw_scan()
1549 priv->scan_request = NULL; in iwlagn_mac_hw_scan()
1550 priv->scan_vif = NULL; in iwlagn_mac_hw_scan()
1554 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_hw_scan()
1556 mutex_unlock(&priv->mutex); in iwlagn_mac_hw_scan()
1561 static void iwl_sta_modify_ps_wake(struct iwl_priv *priv, int sta_id) in iwl_sta_modify_ps_wake() argument
1569 iwl_send_add_sta(priv, &cmd, CMD_ASYNC); in iwl_sta_modify_ps_wake()
1577 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); in iwlagn_mac_sta_notify() local
1581 IWL_DEBUG_MAC80211(priv, "enter\n"); in iwlagn_mac_sta_notify()
1597 iwl_sta_modify_ps_wake(priv, sta_id); in iwlagn_mac_sta_notify()
1602 IWL_DEBUG_MAC80211(priv, "leave\n"); in iwlagn_mac_sta_notify()
1638 struct iwl_priv *priv; in iwl_alloc_all() local
1649 op_mode = hw->priv; in iwl_alloc_all()
1650 priv = IWL_OP_MODE_GET_DVM(op_mode); in iwl_alloc_all()
1651 priv->hw = hw; in iwl_alloc_all()