]>
Commit | Line | Data |
---|---|---|
0975cc8f WYG |
1 | /****************************************************************************** |
2 | * | |
901069c7 | 3 | * Copyright(c) 2007 - 2011 Intel Corporation. All rights reserved. |
0975cc8f WYG |
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 <[email protected]> | |
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); | |
0975cc8f WYG |
120 | enum iwl_antenna_ok iwl_tx_ant_restriction(struct iwl_priv *priv); |
121 | enum iwl_antenna_ok iwl_rx_ant_restriction(struct iwl_priv *priv); | |
122 | void iwl_tt_enter_ct_kill(struct iwl_priv *priv); | |
123 | void iwl_tt_exit_ct_kill(struct iwl_priv *priv); | |
124 | void iwl_tt_handler(struct iwl_priv *priv); | |
125 | void iwl_tt_initialize(struct iwl_priv *priv); | |
126 | void iwl_tt_exit(struct iwl_priv *priv); | |
127 | ||
128 | #endif /* __iwl_tt_setting_h__ */ |