Lines Matching refs:priv
82 bool iwl_tt_is_low_power_state(struct iwl_priv *priv) in iwl_tt_is_low_power_state() argument
84 struct iwl_tt_mgmt *tt = &priv->thermal_throttle; in iwl_tt_is_low_power_state()
91 u8 iwl_tt_current_power_mode(struct iwl_priv *priv) in iwl_tt_current_power_mode() argument
93 struct iwl_tt_mgmt *tt = &priv->thermal_throttle; in iwl_tt_current_power_mode()
98 bool iwl_ht_enabled(struct iwl_priv *priv) in iwl_ht_enabled() argument
100 struct iwl_tt_mgmt *tt = &priv->thermal_throttle; in iwl_ht_enabled()
103 if (!priv->thermal_throttle.advanced_tt) in iwl_ht_enabled()
109 static bool iwl_within_ct_kill_margin(struct iwl_priv *priv) in iwl_within_ct_kill_margin() argument
111 s32 temp = priv->temperature; /* degrees CELSIUS except specified */ in iwl_within_ct_kill_margin()
114 if (!priv->thermal_throttle.advanced_tt) in iwl_within_ct_kill_margin()
123 bool iwl_check_for_ct_kill(struct iwl_priv *priv) in iwl_check_for_ct_kill() argument
127 if (iwl_within_ct_kill_margin(priv)) { in iwl_check_for_ct_kill()
128 iwl_tt_enter_ct_kill(priv); in iwl_check_for_ct_kill()
134 enum iwl_antenna_ok iwl_tx_ant_restriction(struct iwl_priv *priv) in iwl_tx_ant_restriction() argument
136 struct iwl_tt_mgmt *tt = &priv->thermal_throttle; in iwl_tx_ant_restriction()
139 if (!priv->thermal_throttle.advanced_tt) in iwl_tx_ant_restriction()
145 enum iwl_antenna_ok iwl_rx_ant_restriction(struct iwl_priv *priv) in iwl_rx_ant_restriction() argument
147 struct iwl_tt_mgmt *tt = &priv->thermal_throttle; in iwl_rx_ant_restriction()
150 if (!priv->thermal_throttle.advanced_tt) in iwl_rx_ant_restriction()
169 struct iwl_priv *priv = (struct iwl_priv *)data; in iwl_tt_check_exit_ct_kill() local
170 struct iwl_tt_mgmt *tt = &priv->thermal_throttle; in iwl_tt_check_exit_ct_kill()
173 if (test_bit(STATUS_EXIT_PENDING, &priv->status)) in iwl_tt_check_exit_ct_kill()
177 if (priv->thermal_throttle.ct_kill_toggle) { in iwl_tt_check_exit_ct_kill()
178 iwl_write32(priv->trans, CSR_UCODE_DRV_GP1_CLR, in iwl_tt_check_exit_ct_kill()
180 priv->thermal_throttle.ct_kill_toggle = false; in iwl_tt_check_exit_ct_kill()
182 iwl_write32(priv->trans, CSR_UCODE_DRV_GP1_SET, in iwl_tt_check_exit_ct_kill()
184 priv->thermal_throttle.ct_kill_toggle = true; in iwl_tt_check_exit_ct_kill()
186 iwl_read32(priv->trans, CSR_UCODE_DRV_GP1); in iwl_tt_check_exit_ct_kill()
187 if (iwl_trans_grab_nic_access(priv->trans, false, &flags)) in iwl_tt_check_exit_ct_kill()
188 iwl_trans_release_nic_access(priv->trans, &flags); in iwl_tt_check_exit_ct_kill()
193 IWL_DEBUG_TEMP(priv, "schedule ct_kill exit timer\n"); in iwl_tt_check_exit_ct_kill()
194 mod_timer(&priv->thermal_throttle.ct_kill_exit_tm, in iwl_tt_check_exit_ct_kill()
199 static void iwl_perform_ct_kill_task(struct iwl_priv *priv, in iwl_perform_ct_kill_task() argument
203 IWL_DEBUG_TEMP(priv, "Stop all queues\n"); in iwl_perform_ct_kill_task()
204 if (priv->mac80211_registered) in iwl_perform_ct_kill_task()
205 ieee80211_stop_queues(priv->hw); in iwl_perform_ct_kill_task()
206 IWL_DEBUG_TEMP(priv, in iwl_perform_ct_kill_task()
208 mod_timer(&priv->thermal_throttle.ct_kill_exit_tm, in iwl_perform_ct_kill_task()
211 IWL_DEBUG_TEMP(priv, "Wake all queues\n"); in iwl_perform_ct_kill_task()
212 if (priv->mac80211_registered) in iwl_perform_ct_kill_task()
213 ieee80211_wake_queues(priv->hw); in iwl_perform_ct_kill_task()
219 struct iwl_priv *priv = (struct iwl_priv *)data; in iwl_tt_ready_for_ct_kill() local
220 struct iwl_tt_mgmt *tt = &priv->thermal_throttle; in iwl_tt_ready_for_ct_kill()
222 if (test_bit(STATUS_EXIT_PENDING, &priv->status)) in iwl_tt_ready_for_ct_kill()
227 IWL_DEBUG_TEMP(priv, "entering CT_KILL state when " in iwl_tt_ready_for_ct_kill()
230 set_bit(STATUS_CT_KILL, &priv->status); in iwl_tt_ready_for_ct_kill()
231 iwl_perform_ct_kill_task(priv, true); in iwl_tt_ready_for_ct_kill()
235 static void iwl_prepare_ct_kill_task(struct iwl_priv *priv) in iwl_prepare_ct_kill_task() argument
237 IWL_DEBUG_TEMP(priv, "Prepare to enter IWL_TI_CT_KILL\n"); in iwl_prepare_ct_kill_task()
239 iwl_send_statistics_request(priv, 0, false); in iwl_prepare_ct_kill_task()
241 mod_timer(&priv->thermal_throttle.ct_kill_waiting_tm, in iwl_prepare_ct_kill_task()
258 static void iwl_legacy_tt_handler(struct iwl_priv *priv, s32 temp, bool force) in iwl_legacy_tt_handler() argument
260 struct iwl_tt_mgmt *tt = &priv->thermal_throttle; in iwl_legacy_tt_handler()
268 IWL_DEBUG_TEMP(priv, in iwl_legacy_tt_handler()
288 del_timer_sync(&priv->thermal_throttle.ct_kill_waiting_tm); in iwl_legacy_tt_handler()
308 mutex_lock(&priv->mutex); in iwl_legacy_tt_handler()
310 clear_bit(STATUS_CT_KILL, &priv->status); in iwl_legacy_tt_handler()
312 iwl_power_update_mode(priv, true)) { in iwl_legacy_tt_handler()
317 set_bit(STATUS_CT_KILL, &priv->status); in iwl_legacy_tt_handler()
319 IWL_ERR(priv, "Cannot update power mode, " in iwl_legacy_tt_handler()
324 set_bit(STATUS_CT_KILL, &priv->status); in iwl_legacy_tt_handler()
325 iwl_perform_ct_kill_task(priv, true); in iwl_legacy_tt_handler()
327 iwl_prepare_ct_kill_task(priv); in iwl_legacy_tt_handler()
332 iwl_perform_ct_kill_task(priv, false); in iwl_legacy_tt_handler()
333 IWL_DEBUG_TEMP(priv, "Temperature state changed %u\n", in iwl_legacy_tt_handler()
335 IWL_DEBUG_TEMP(priv, "Power Index change to %u\n", in iwl_legacy_tt_handler()
338 mutex_unlock(&priv->mutex); in iwl_legacy_tt_handler()
363 static void iwl_advance_tt_handler(struct iwl_priv *priv, s32 temp, bool force) in iwl_advance_tt_handler() argument
365 struct iwl_tt_mgmt *tt = &priv->thermal_throttle; in iwl_advance_tt_handler()
392 IWL_DEBUG_TEMP(priv, in iwl_advance_tt_handler()
409 del_timer_sync(&priv->thermal_throttle.ct_kill_waiting_tm); in iwl_advance_tt_handler()
415 if (!iwl_ht_enabled(priv)) { in iwl_advance_tt_handler()
418 for_each_context(priv, ctx) { in iwl_advance_tt_handler()
434 iwl_set_rxon_ht(priv, &priv->current_ht_config); in iwl_advance_tt_handler()
446 iwl_set_rxon_ht(priv, &priv->current_ht_config); in iwl_advance_tt_handler()
448 mutex_lock(&priv->mutex); in iwl_advance_tt_handler()
450 clear_bit(STATUS_CT_KILL, &priv->status); in iwl_advance_tt_handler()
452 iwl_power_update_mode(priv, true)) { in iwl_advance_tt_handler()
456 IWL_ERR(priv, "Cannot update power mode, " in iwl_advance_tt_handler()
459 set_bit(STATUS_CT_KILL, &priv->status); in iwl_advance_tt_handler()
462 IWL_DEBUG_TEMP(priv, in iwl_advance_tt_handler()
468 IWL_DEBUG_TEMP(priv, in iwl_advance_tt_handler()
470 set_bit(STATUS_CT_KILL, &priv->status); in iwl_advance_tt_handler()
471 iwl_perform_ct_kill_task(priv, true); in iwl_advance_tt_handler()
474 iwl_prepare_ct_kill_task(priv); in iwl_advance_tt_handler()
478 IWL_DEBUG_TEMP(priv, "Exit IWL_TI_CT_KILL\n"); in iwl_advance_tt_handler()
479 iwl_perform_ct_kill_task(priv, false); in iwl_advance_tt_handler()
482 mutex_unlock(&priv->mutex); in iwl_advance_tt_handler()
498 struct iwl_priv *priv = container_of(work, struct iwl_priv, ct_enter); in iwl_bg_ct_enter() local
499 struct iwl_tt_mgmt *tt = &priv->thermal_throttle; in iwl_bg_ct_enter()
501 if (test_bit(STATUS_EXIT_PENDING, &priv->status)) in iwl_bg_ct_enter()
504 if (!iwl_is_ready(priv)) in iwl_bg_ct_enter()
508 IWL_ERR(priv, "Device reached critical temperature " in iwl_bg_ct_enter()
510 if (!priv->thermal_throttle.advanced_tt) in iwl_bg_ct_enter()
511 iwl_legacy_tt_handler(priv, in iwl_bg_ct_enter()
515 iwl_advance_tt_handler(priv, in iwl_bg_ct_enter()
527 struct iwl_priv *priv = container_of(work, struct iwl_priv, ct_exit); in iwl_bg_ct_exit() local
528 struct iwl_tt_mgmt *tt = &priv->thermal_throttle; in iwl_bg_ct_exit()
530 if (test_bit(STATUS_EXIT_PENDING, &priv->status)) in iwl_bg_ct_exit()
533 if (!iwl_is_ready(priv)) in iwl_bg_ct_exit()
537 del_timer_sync(&priv->thermal_throttle.ct_kill_exit_tm); in iwl_bg_ct_exit()
540 IWL_ERR(priv, in iwl_bg_ct_exit()
547 priv->temperature = 0; in iwl_bg_ct_exit()
548 if (!priv->thermal_throttle.advanced_tt) in iwl_bg_ct_exit()
549 iwl_legacy_tt_handler(priv, in iwl_bg_ct_exit()
553 iwl_advance_tt_handler(priv, CT_KILL_EXIT_THRESHOLD, in iwl_bg_ct_exit()
558 void iwl_tt_enter_ct_kill(struct iwl_priv *priv) in iwl_tt_enter_ct_kill() argument
560 if (test_bit(STATUS_EXIT_PENDING, &priv->status)) in iwl_tt_enter_ct_kill()
563 IWL_DEBUG_TEMP(priv, "Queueing critical temperature enter.\n"); in iwl_tt_enter_ct_kill()
564 queue_work(priv->workqueue, &priv->ct_enter); in iwl_tt_enter_ct_kill()
567 void iwl_tt_exit_ct_kill(struct iwl_priv *priv) in iwl_tt_exit_ct_kill() argument
569 if (test_bit(STATUS_EXIT_PENDING, &priv->status)) in iwl_tt_exit_ct_kill()
572 IWL_DEBUG_TEMP(priv, "Queueing critical temperature exit.\n"); in iwl_tt_exit_ct_kill()
573 queue_work(priv->workqueue, &priv->ct_exit); in iwl_tt_exit_ct_kill()
578 struct iwl_priv *priv = container_of(work, struct iwl_priv, tt_work); in iwl_bg_tt_work() local
579 s32 temp = priv->temperature; /* degrees CELSIUS except specified */ in iwl_bg_tt_work()
581 if (test_bit(STATUS_EXIT_PENDING, &priv->status)) in iwl_bg_tt_work()
584 if (!priv->thermal_throttle.advanced_tt) in iwl_bg_tt_work()
585 iwl_legacy_tt_handler(priv, temp, false); in iwl_bg_tt_work()
587 iwl_advance_tt_handler(priv, temp, false); in iwl_bg_tt_work()
590 void iwl_tt_handler(struct iwl_priv *priv) in iwl_tt_handler() argument
592 if (test_bit(STATUS_EXIT_PENDING, &priv->status)) in iwl_tt_handler()
595 IWL_DEBUG_TEMP(priv, "Queueing thermal throttling work.\n"); in iwl_tt_handler()
596 queue_work(priv->workqueue, &priv->tt_work); in iwl_tt_handler()
604 void iwl_tt_initialize(struct iwl_priv *priv) in iwl_tt_initialize() argument
606 struct iwl_tt_mgmt *tt = &priv->thermal_throttle; in iwl_tt_initialize()
610 IWL_DEBUG_TEMP(priv, "Initialize Thermal Throttling\n"); in iwl_tt_initialize()
615 setup_timer(&priv->thermal_throttle.ct_kill_exit_tm, in iwl_tt_initialize()
616 iwl_tt_check_exit_ct_kill, (unsigned long)priv); in iwl_tt_initialize()
617 setup_timer(&priv->thermal_throttle.ct_kill_waiting_tm, in iwl_tt_initialize()
618 iwl_tt_ready_for_ct_kill, (unsigned long)priv); in iwl_tt_initialize()
620 INIT_WORK(&priv->tt_work, iwl_bg_tt_work); in iwl_tt_initialize()
621 INIT_WORK(&priv->ct_enter, iwl_bg_ct_enter); in iwl_tt_initialize()
622 INIT_WORK(&priv->ct_exit, iwl_bg_ct_exit); in iwl_tt_initialize()
624 if (priv->lib->adv_thermal_throttle) { in iwl_tt_initialize()
625 IWL_DEBUG_TEMP(priv, "Advanced Thermal Throttling\n"); in iwl_tt_initialize()
634 IWL_ERR(priv, "Fallback to Legacy Throttling\n"); in iwl_tt_initialize()
635 priv->thermal_throttle.advanced_tt = false; in iwl_tt_initialize()
657 priv->thermal_throttle.advanced_tt = true; in iwl_tt_initialize()
660 IWL_DEBUG_TEMP(priv, "Legacy Thermal Throttling\n"); in iwl_tt_initialize()
661 priv->thermal_throttle.advanced_tt = false; in iwl_tt_initialize()
666 void iwl_tt_exit(struct iwl_priv *priv) in iwl_tt_exit() argument
668 struct iwl_tt_mgmt *tt = &priv->thermal_throttle; in iwl_tt_exit()
671 del_timer_sync(&priv->thermal_throttle.ct_kill_exit_tm); in iwl_tt_exit()
673 del_timer_sync(&priv->thermal_throttle.ct_kill_waiting_tm); in iwl_tt_exit()
674 cancel_work_sync(&priv->tt_work); in iwl_tt_exit()
675 cancel_work_sync(&priv->ct_enter); in iwl_tt_exit()
676 cancel_work_sync(&priv->ct_exit); in iwl_tt_exit()
678 if (priv->thermal_throttle.advanced_tt) { in iwl_tt_exit()