~ubuntu-branches/ubuntu/utopic/linux-ti-omap/utopic

« back to all changes in this revision

Viewing changes to drivers/net/wireless/iwlwifi/iwl-power.h

  • Committer: Bazaar Package Importer
  • Author(s): Amit Kucheria, Amit Kucheria
  • Date: 2010-03-10 02:28:15 UTC
  • Revision ID: james.westby@ubuntu.com-20100310022815-7sd3gwvn5kenaq33
Tags: 2.6.33-500.1
[ Amit Kucheria ]

* Initial release of a 2.6.33-based OMAP kernel
* UBUNTU: [Upstream] Fix omap 1-wire driver compilation
* UBUNTU: ubuntu: AppArmor -- update to mainline 2010-03-04

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/******************************************************************************
 
2
 *
 
3
 * Copyright(c) 2007 - 2009 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_power_setting_h__
 
29
#define __iwl_power_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
enum iwl_power_level {
 
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,
 
123
        IWL_POWER_NUM
 
124
};
 
125
 
 
126
struct iwl_power_mgr {
 
127
        struct iwl_powertable_cmd sleep_cmd;
 
128
        int debug_sleep_level_override;
 
129
        bool pci_pm;
 
130
};
 
131
 
 
132
int iwl_power_update_mode(struct iwl_priv *priv, bool force);
 
133
bool iwl_ht_enabled(struct iwl_priv *priv);
 
134
bool iwl_within_ct_kill_margin(struct iwl_priv *priv);
 
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);
 
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);
 
142
void iwl_power_initialize(struct iwl_priv *priv);
 
143
 
 
144
extern bool no_sleep_autoadjust;
 
145
 
 
146
#endif  /* __iwl_power_setting_h__ */