Commit | Line | Data |
---|---|---|
5da4b55f MA |
1 | /****************************************************************************** |
2 | * | |
01f8162a | 3 | * Copyright(c) 2007 - 2009 Intel Corporation. All rights reserved. |
5da4b55f MA |
4 | * |
5 | * Portions of this file are derived from the ipw3945 project, as well | |
6 | * as portions of the ieee80211 subsystem header files. | |
7 | * | |
8 | * This program is free software; you can redistribute it and/or modify it | |
9 | * under the terms of version 2 of the GNU General Public License as | |
10 | * published by the Free Software Foundation. | |
11 | * | |
12 | * This program is distributed in the hope that it will be useful, but WITHOUT | |
13 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | |
15 | * more details. | |
16 | * | |
17 | * You should have received a copy of the GNU General Public License along with | |
18 | * this program; if not, write to the Free Software Foundation, Inc., | |
19 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA | |
20 | * | |
21 | * The full GNU General Public License is included in this distribution in the | |
22 | * file called LICENSE. | |
23 | * | |
24 | * Contact Information: | |
759ef89f | 25 | * Intel Linux Wireless <ilw@linux.intel.com> |
5da4b55f MA |
26 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
27 | *****************************************************************************/ | |
28 | #ifndef __iwl_power_setting_h__ | |
29 | #define __iwl_power_setting_h__ | |
30 | ||
5a36ba0e | 31 | #include "iwl-commands.h" |
5da4b55f | 32 | |
46f9381a WYG |
33 | #define IWL_ABSOLUTE_ZERO 0 |
34 | #define IWL_ABSOLUTE_MAX 0xFFFFFFFF | |
39b73fb1 | 35 | #define IWL_TT_INCREASE_MARGIN 5 |
7812b167 | 36 | #define IWL_TT_CT_KILL_MARGIN 3 |
39b73fb1 | 37 | |
3ad3b92a JB |
38 | enum iwl_antenna_ok { |
39 | IWL_ANT_OK_NONE, | |
40 | IWL_ANT_OK_SINGLE, | |
41 | IWL_ANT_OK_MULTI, | |
42 | }; | |
46f9381a | 43 | |
39b73fb1 WYG |
44 | /* Thermal Throttling State Machine states */ |
45 | enum iwl_tt_state { | |
46 | IWL_TI_0, /* normal temperature, system power state */ | |
47 | IWL_TI_1, /* high temperature detect, low power state */ | |
48 | IWL_TI_2, /* higher temperature detected, lower power state */ | |
49 | IWL_TI_CT_KILL, /* critical temperature detected, lowest power state */ | |
50 | IWL_TI_STATE_MAX | |
51 | }; | |
52 | ||
46f9381a | 53 | /** |
3ad3b92a | 54 | * struct iwl_tt_restriction - Thermal Throttling restriction table |
46f9381a WYG |
55 | * @tx_stream: number of tx stream allowed |
56 | * @is_ht: ht enable/disable | |
57 | * @rx_stream: number of rx stream allowed | |
3ad3b92a JB |
58 | * |
59 | * This table is used by advance thermal throttling management | |
60 | * based on the current thermal throttling state, and determines | |
61 | * the number of tx/rx streams and the status of HT operation. | |
46f9381a WYG |
62 | */ |
63 | struct iwl_tt_restriction { | |
3ad3b92a JB |
64 | enum iwl_antenna_ok tx_stream; |
65 | enum iwl_antenna_ok rx_stream; | |
46f9381a | 66 | bool is_ht; |
46f9381a WYG |
67 | }; |
68 | ||
69 | /** | |
3ad3b92a | 70 | * struct iwl_tt_trans - Thermal Throttling transaction table |
46f9381a WYG |
71 | * @next_state: next thermal throttling mode |
72 | * @tt_low: low temperature threshold to change state | |
73 | * @tt_high: high temperature threshold to change state | |
3ad3b92a JB |
74 | * |
75 | * This is used by the advanced thermal throttling algorithm | |
76 | * to determine the next thermal state to go based on the | |
77 | * current temperature. | |
46f9381a WYG |
78 | */ |
79 | struct iwl_tt_trans { | |
80 | enum iwl_tt_state next_state; | |
81 | u32 tt_low; | |
82 | u32 tt_high; | |
83 | }; | |
84 | ||
39b73fb1 WYG |
85 | /** |
86 | * struct iwl_tt_mgnt - Thermal Throttling Management structure | |
3ad3b92a | 87 | * @advanced_tt: advanced thermal throttle required |
39b73fb1 WYG |
88 | * @state: current Thermal Throttling state |
89 | * @tt_power_mode: Thermal Throttling power mode index | |
90 | * being used to set power level when | |
91 | * when thermal throttling state != IWL_TI_0 | |
92 | * the tt_power_mode should set to different | |
93 | * power mode based on the current tt state | |
39b73fb1 | 94 | * @tt_previous_temperature: last measured temperature |
46f9381a WYG |
95 | * @iwl_tt_restriction: ptr to restriction tbl, used by advance |
96 | * thermal throttling to determine how many tx/rx streams | |
97 | * should be used in tt state; and can HT be enabled or not | |
98 | * @iwl_tt_trans: ptr to adv trans table, used by advance thermal throttling | |
99 | * state transaction | |
3ad3b92a JB |
100 | * @ct_kill_toggle: used to toggle the CSR bit when checking uCode temperature |
101 | * @ct_kill_exit_tm: timer to exit thermal kill | |
39b73fb1 WYG |
102 | */ |
103 | struct iwl_tt_mgmt { | |
104 | enum iwl_tt_state state; | |
3ad3b92a | 105 | bool advanced_tt; |
39b73fb1 | 106 | u8 tt_power_mode; |
3ad3b92a | 107 | bool ct_kill_toggle; |
39b73fb1 WYG |
108 | #ifdef CONFIG_IWLWIFI_DEBUG |
109 | s32 tt_previous_temp; | |
110 | #endif | |
46f9381a WYG |
111 | struct iwl_tt_restriction *restriction; |
112 | struct iwl_tt_trans *transaction; | |
3ad3b92a | 113 | struct timer_list ct_kill_exit_tm; |
7812b167 | 114 | struct timer_list ct_kill_waiting_tm; |
39b73fb1 WYG |
115 | }; |
116 | ||
e312c24c | 117 | enum iwl_power_level { |
298df1f6 EK |
118 | IWL_POWER_INDEX_1, |
119 | IWL_POWER_INDEX_2, | |
120 | IWL_POWER_INDEX_3, | |
121 | IWL_POWER_INDEX_4, | |
122 | IWL_POWER_INDEX_5, | |
7af2c460 | 123 | IWL_POWER_NUM |
298df1f6 EK |
124 | }; |
125 | ||
5da4b55f | 126 | struct iwl_power_mgr { |
e312c24c JB |
127 | struct iwl_powertable_cmd sleep_cmd; |
128 | int debug_sleep_level_override; | |
129 | bool pci_pm; | |
5da4b55f MA |
130 | }; |
131 | ||
04816448 | 132 | int iwl_power_update_mode(struct iwl_priv *priv, bool force); |
46f9381a | 133 | bool iwl_ht_enabled(struct iwl_priv *priv); |
7812b167 | 134 | bool iwl_within_ct_kill_margin(struct iwl_priv *priv); |
3ad3b92a JB |
135 | enum iwl_antenna_ok iwl_tx_ant_restriction(struct iwl_priv *priv); |
136 | enum iwl_antenna_ok iwl_rx_ant_restriction(struct iwl_priv *priv); | |
39b73fb1 WYG |
137 | void iwl_tt_enter_ct_kill(struct iwl_priv *priv); |
138 | void iwl_tt_exit_ct_kill(struct iwl_priv *priv); | |
139 | void iwl_tt_handler(struct iwl_priv *priv); | |
140 | void iwl_tt_initialize(struct iwl_priv *priv); | |
141 | void iwl_tt_exit(struct iwl_priv *priv); | |
5da4b55f | 142 | void iwl_power_initialize(struct iwl_priv *priv); |
5da4b55f | 143 | |
e312c24c JB |
144 | extern bool no_sleep_autoadjust; |
145 | ||
5da4b55f | 146 | #endif /* __iwl_power_setting_h__ */ |