brintos

brintos / linux-shallow public Read only

0
0
Text · 3.7 KiB · 4af792d Raw
111 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/******************************************************************************3 *4 * Copyright(c) 2007 - 2014, 2023-2024 Intel Corporation. All rights reserved.5 *6 * Portions of this file are derived from the ipw3945 project, as well7 * as portions of the ieee80211 subsystem header files.8 *****************************************************************************/9#ifndef __iwl_tt_setting_h__10#define __iwl_tt_setting_h__11 12#include "commands.h"13 14#define IWL_ABSOLUTE_ZERO		015#define IWL_ABSOLUTE_MAX		0xFFFFFFFF16#define IWL_TT_INCREASE_MARGIN	517#define IWL_TT_CT_KILL_MARGIN	318 19enum iwl_antenna_ok {20	IWL_ANT_OK_NONE,21	IWL_ANT_OK_SINGLE,22	IWL_ANT_OK_MULTI,23};24 25/* Thermal Throttling State Machine states */26enum  iwl_tt_state {27	IWL_TI_0,	/* normal temperature, system power state */28	IWL_TI_1,	/* high temperature detect, low power state */29	IWL_TI_2,	/* higher temperature detected, lower power state */30	IWL_TI_CT_KILL, /* critical temperature detected, lowest power state */31	IWL_TI_STATE_MAX32};33 34/**35 * struct iwl_tt_restriction - Thermal Throttling restriction table36 * @tx_stream: number of tx stream allowed37 * @is_ht: ht enable/disable38 * @rx_stream: number of rx stream allowed39 *40 * This table is used by advance thermal throttling management41 * based on the current thermal throttling state, and determines42 * the number of tx/rx streams and the status of HT operation.43 */44struct iwl_tt_restriction {45	enum iwl_antenna_ok tx_stream;46	enum iwl_antenna_ok rx_stream;47	bool is_ht;48};49 50/**51 * struct iwl_tt_trans - Thermal Throttling transaction table52 * @next_state:  next thermal throttling mode53 * @tt_low: low temperature threshold to change state54 * @tt_high: high temperature threshold to change state55 *56 * This is used by the advanced thermal throttling algorithm57 * to determine the next thermal state to go based on the58 * current temperature.59 */60struct iwl_tt_trans {61	enum iwl_tt_state next_state;62	u32 tt_low;63	u32 tt_high;64};65 66/**67 * struct iwl_tt_mgmt - Thermal Throttling Management structure68 * @advanced_tt:    advanced thermal throttle required69 * @state:          current Thermal Throttling state70 * @tt_power_mode:  Thermal Throttling power mode index71 *		    being used to set power level when72 *		    when thermal throttling state != IWL_TI_073 *		    the tt_power_mode should set to different74 *		    power mode based on the current tt state75 * @tt_previous_temp: last measured temperature76 * @restriction: ptr to restriction tbl, used by advance77 *		    thermal throttling to determine how many tx/rx streams78 *		    should be used in tt state; and can HT be enabled or not79 * @transaction: ptr to adv trans table, used by advance thermal throttling80 *		    state transaction81 * @ct_kill_toggle: used to toggle the CSR bit when checking uCode temperature82 * @ct_kill_exit_tm: timer to exit thermal kill83 * @ct_kill_waiting_tm: timer to enter thermal kill84 */85struct iwl_tt_mgmt {86	enum iwl_tt_state state;87	bool advanced_tt;88	u8 tt_power_mode;89	bool ct_kill_toggle;90#ifdef CONFIG_IWLWIFI_DEBUG91	s32 tt_previous_temp;92#endif93	struct iwl_tt_restriction *restriction;94	struct iwl_tt_trans *transaction;95	struct timer_list ct_kill_exit_tm;96	struct timer_list ct_kill_waiting_tm;97};98 99u8 iwl_tt_current_power_mode(struct iwl_priv *priv);100bool iwl_tt_is_low_power_state(struct iwl_priv *priv);101bool iwl_ht_enabled(struct iwl_priv *priv);102enum iwl_antenna_ok iwl_tx_ant_restriction(struct iwl_priv *priv);103enum iwl_antenna_ok iwl_rx_ant_restriction(struct iwl_priv *priv);104void iwl_tt_enter_ct_kill(struct iwl_priv *priv);105void iwl_tt_exit_ct_kill(struct iwl_priv *priv);106void iwl_tt_handler(struct iwl_priv *priv);107void iwl_tt_initialize(struct iwl_priv *priv);108void iwl_tt_exit(struct iwl_priv *priv);109 110#endif  /* __iwl_tt_setting_h__ */111