diff options
author | Wey-Yi Guy <wey-yi.w.guy@intel.com> | 2009-07-24 14:13:02 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-07-27 15:24:20 -0400 |
commit | 39b73fb15e4704fd4d1e33688135810637f5f3fb (patch) | |
tree | d0efed58f5a52ccdc19d8f133aa64af7a0691e70 /drivers/net/wireless/iwlwifi/iwl-power.h | |
parent | 672639de13c4db92ed6a47e68043a4317e219902 (diff) |
iwlwifi: Thermal Throttling Management - Part 1
Part 1 of Thermal Throttling Management -
Thermal Throttling feature is used to put NIC into low power state when
driver detect the Radio temperature reach pre-defined threshold
Two Thermal Throttling Management Methods; this patch introduce the
Legacy Thermal Management:
IWL_TI_0: normal temperature, system power state
IWL_TI_1: high temperature detect, low power state
IWL_TI_2: higher temperature detected, lower power state
IWL_TI_CT_KILL: critical temperature detected, lowest power state
Once get into CT_KILL state, uCode go into sleep, driver will stop all
the active queues, then move to IWL_TI_CT_KILL state; also set up 5
seconds timer to toggle CSR flag, uCode wake up upon CSR flag change,
then measure the temperature.
If temperature is above CT_KILL exit threshold, uCode go backto sleep;
if temperature is below CT_KILL exit threshold, uCode send Card State
Notification response with appropriate CT_KILL status flag, and uCode
remain awake, Driver receive Card State Notification Response and update
the card temperature to the CT_KILL exit threshold.
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-power.h')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-power.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-power.h b/drivers/net/wireless/iwlwifi/iwl-power.h index 37ba3bb7a25a..7bb10d41ae5f 100644 --- a/drivers/net/wireless/iwlwifi/iwl-power.h +++ b/drivers/net/wireless/iwlwifi/iwl-power.h | |||
@@ -33,6 +33,38 @@ | |||
33 | 33 | ||
34 | struct iwl_priv; | 34 | struct iwl_priv; |
35 | 35 | ||
36 | #define IWL_TT_INCREASE_MARGIN 5 | ||
37 | |||
38 | /* Thermal Throttling State Machine states */ | ||
39 | enum iwl_tt_state { | ||
40 | IWL_TI_0, /* normal temperature, system power state */ | ||
41 | IWL_TI_1, /* high temperature detect, low power state */ | ||
42 | IWL_TI_2, /* higher temperature detected, lower power state */ | ||
43 | IWL_TI_CT_KILL, /* critical temperature detected, lowest power state */ | ||
44 | IWL_TI_STATE_MAX | ||
45 | }; | ||
46 | |||
47 | /** | ||
48 | * struct iwl_tt_mgnt - Thermal Throttling Management structure | ||
49 | * @state: current Thermal Throttling state | ||
50 | * @tt_power_mode: Thermal Throttling power mode index | ||
51 | * being used to set power level when | ||
52 | * when thermal throttling state != IWL_TI_0 | ||
53 | * the tt_power_mode should set to different | ||
54 | * power mode based on the current tt state | ||
55 | * @sys_power_mode: previous system power mode | ||
56 | * before transition into TT state | ||
57 | * @tt_previous_temperature: last measured temperature | ||
58 | */ | ||
59 | struct iwl_tt_mgmt { | ||
60 | enum iwl_tt_state state; | ||
61 | u8 tt_power_mode; | ||
62 | u8 sys_power_mode; | ||
63 | #ifdef CONFIG_IWLWIFI_DEBUG | ||
64 | s32 tt_previous_temp; | ||
65 | #endif | ||
66 | }; | ||
67 | |||
36 | enum { | 68 | enum { |
37 | IWL_POWER_MODE_CAM, /* Continuously Aware Mode, always on */ | 69 | IWL_POWER_MODE_CAM, /* Continuously Aware Mode, always on */ |
38 | IWL_POWER_INDEX_1, | 70 | IWL_POWER_INDEX_1, |
@@ -59,10 +91,20 @@ struct iwl_power_mgr { | |||
59 | u8 power_mode; | 91 | u8 power_mode; |
60 | u8 user_power_setting; /* set by user through sysfs */ | 92 | u8 user_power_setting; /* set by user through sysfs */ |
61 | u8 power_disabled; /* set by mac80211's CONF_PS */ | 93 | u8 power_disabled; /* set by mac80211's CONF_PS */ |
94 | struct iwl_tt_mgmt tt; /* Thermal Throttling Management */ | ||
95 | bool ct_kill_toggle; /* use to toggle the CSR bit when | ||
96 | * checking uCode temperature | ||
97 | */ | ||
98 | struct timer_list ct_kill_exit_tm; | ||
62 | }; | 99 | }; |
63 | 100 | ||
64 | int iwl_power_update_mode(struct iwl_priv *priv, bool force); | 101 | int iwl_power_update_mode(struct iwl_priv *priv, bool force); |
65 | int iwl_power_set_user_mode(struct iwl_priv *priv, u16 mode); | 102 | int iwl_power_set_user_mode(struct iwl_priv *priv, u16 mode); |
103 | void iwl_tt_enter_ct_kill(struct iwl_priv *priv); | ||
104 | void iwl_tt_exit_ct_kill(struct iwl_priv *priv); | ||
105 | void iwl_tt_handler(struct iwl_priv *priv); | ||
106 | void iwl_tt_initialize(struct iwl_priv *priv); | ||
107 | void iwl_tt_exit(struct iwl_priv *priv); | ||
66 | void iwl_power_initialize(struct iwl_priv *priv); | 108 | void iwl_power_initialize(struct iwl_priv *priv); |
67 | 109 | ||
68 | #endif /* __iwl_power_setting_h__ */ | 110 | #endif /* __iwl_power_setting_h__ */ |