linux/drivers/net/wireless/intel/iwlwifi/dvm/tt.h
<<
>>
Prefs
   1/******************************************************************************
   2 *
   3 * Copyright(c) 2007 - 2014 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 <linuxwifi@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 "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
  38enum 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 */
  45enum  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 */
  63struct 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 */
  79struct 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 */
 103struct 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
 117u8 iwl_tt_current_power_mode(struct iwl_priv *priv);
 118bool iwl_tt_is_low_power_state(struct iwl_priv *priv);
 119bool iwl_ht_enabled(struct iwl_priv *priv);
 120enum iwl_antenna_ok iwl_tx_ant_restriction(struct iwl_priv *priv);
 121enum iwl_antenna_ok iwl_rx_ant_restriction(struct iwl_priv *priv);
 122void iwl_tt_enter_ct_kill(struct iwl_priv *priv);
 123void iwl_tt_exit_ct_kill(struct iwl_priv *priv);
 124void iwl_tt_handler(struct iwl_priv *priv);
 125void iwl_tt_initialize(struct iwl_priv *priv);
 126void iwl_tt_exit(struct iwl_priv *priv);
 127
 128#endif  /* __iwl_tt_setting_h__ */
 129