diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-agn-tt.h')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn-tt.h | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-tt.h b/drivers/net/wireless/iwlwifi/iwl-agn-tt.h new file mode 100644 index 00000000000..d118ed29bf3 --- /dev/null +++ b/drivers/net/wireless/iwlwifi/iwl-agn-tt.h | |||
@@ -0,0 +1,129 @@ | |||
1 | /****************************************************************************** | ||
2 | * | ||
3 | * Copyright(c) 2007 - 2011 Intel Corporation. All rights reserved. | ||
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: | ||
25 | * Intel Linux Wireless <ilw@linux.intel.com> | ||
26 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
27 | *****************************************************************************/ | ||
28 | #ifndef __iwl_tt_setting_h__ | ||
29 | #define __iwl_tt_setting_h__ | ||
30 | |||
31 | #include "iwl-commands.h" | ||
32 | |||
33 | #define IWL_ABSOLUTE_ZERO 0 | ||
34 | #define IWL_ABSOLUTE_MAX 0xFFFFFFFF | ||
35 | #define IWL_TT_INCREASE_MARGIN 5 | ||
36 | #define IWL_TT_CT_KILL_MARGIN 3 | ||
37 | |||
38 | enum iwl_antenna_ok { | ||
39 | IWL_ANT_OK_NONE, | ||
40 | IWL_ANT_OK_SINGLE, | ||
41 | IWL_ANT_OK_MULTI, | ||
42 | }; | ||
43 | |||
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 | |||
53 | /** | ||
54 | * struct iwl_tt_restriction - Thermal Throttling restriction table | ||
55 | * @tx_stream: number of tx stream allowed | ||
56 | * @is_ht: ht enable/disable | ||
57 | * @rx_stream: number of rx stream allowed | ||
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. | ||
62 | */ | ||
63 | struct iwl_tt_restriction { | ||
64 | enum iwl_antenna_ok tx_stream; | ||
65 | enum iwl_antenna_ok rx_stream; | ||
66 | bool is_ht; | ||
67 | }; | ||
68 | |||
69 | /** | ||
70 | * struct iwl_tt_trans - Thermal Throttling transaction table | ||
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 | ||
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. | ||
78 | */ | ||
79 | struct iwl_tt_trans { | ||
80 | enum iwl_tt_state next_state; | ||
81 | u32 tt_low; | ||
82 | u32 tt_high; | ||
83 | }; | ||
84 | |||
85 | /** | ||
86 | * struct iwl_tt_mgnt - Thermal Throttling Management structure | ||
87 | * @advanced_tt: advanced thermal throttle required | ||
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 | ||
94 | * @tt_previous_temperature: last measured temperature | ||
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 | ||
100 | * @ct_kill_toggle: used to toggle the CSR bit when checking uCode temperature | ||
101 | * @ct_kill_exit_tm: timer to exit thermal kill | ||
102 | */ | ||
103 | struct iwl_tt_mgmt { | ||
104 | enum iwl_tt_state state; | ||
105 | bool advanced_tt; | ||
106 | u8 tt_power_mode; | ||
107 | bool ct_kill_toggle; | ||
108 | #ifdef CONFIG_IWLWIFI_DEBUG | ||
109 | s32 tt_previous_temp; | ||
110 | #endif | ||
111 | struct iwl_tt_restriction *restriction; | ||
112 | struct iwl_tt_trans *transaction; | ||
113 | struct timer_list ct_kill_exit_tm; | ||
114 | struct timer_list ct_kill_waiting_tm; | ||
115 | }; | ||
116 | |||
117 | u8 iwl_tt_current_power_mode(struct iwl_priv *priv); | ||
118 | bool iwl_tt_is_low_power_state(struct iwl_priv *priv); | ||
119 | bool iwl_ht_enabled(struct iwl_priv *priv); | ||
120 | bool iwl_check_for_ct_kill(struct iwl_priv *priv); | ||
121 | enum iwl_antenna_ok iwl_tx_ant_restriction(struct iwl_priv *priv); | ||
122 | enum iwl_antenna_ok iwl_rx_ant_restriction(struct iwl_priv *priv); | ||
123 | void iwl_tt_enter_ct_kill(struct iwl_priv *priv); | ||
124 | void iwl_tt_exit_ct_kill(struct iwl_priv *priv); | ||
125 | void iwl_tt_handler(struct iwl_priv *priv); | ||
126 | void iwl_tt_initialize(struct iwl_priv *priv); | ||
127 | void iwl_tt_exit(struct iwl_priv *priv); | ||
128 | |||
129 | #endif /* __iwl_tt_setting_h__ */ | ||