Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0f8f93d6 authored by Eliad Peller's avatar Eliad Peller Committed by Emmanuel Grumbach
Browse files

iwlwifi: support multiple d0i3 modes



Allow configuring additional d0i3 mode, in which the
fw will be configured to enter d0i3 only on suspend
(while keeping the wake_lock accounting as usual)

The d0i3 mode to use will be determined by the
underlying trans layer.

Signed-off-by: default avatarEliad Peller <eliadx.peller@intel.com>
Reviewed-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
parent 91742449
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -551,6 +551,21 @@ enum iwl_trans_state {
	IWL_TRANS_FW_ALIVE	= 1,
};

/**
 * enum iwl_d0i3_mode - d0i3 mode
 *
 * @IWL_D0I3_MODE_OFF - d0i3 is disabled
 * @IWL_D0I3_MODE_ON_IDLE - enter d0i3 when device is idle
 *	(e.g. no active references)
 * @IWL_D0I3_MODE_ON_SUSPEND - enter d0i3 only on suspend
 *	(in case of 'any' trigger)
 */
enum iwl_d0i3_mode {
	IWL_D0I3_MODE_OFF = 0,
	IWL_D0I3_MODE_ON_IDLE,
	IWL_D0I3_MODE_ON_SUSPEND,
};

/**
 * struct iwl_trans - transport common data
 *
@@ -612,6 +627,8 @@ struct iwl_trans {
	const struct iwl_fw_dbg_conf_tlv *dbg_conf_tlv[FW_DBG_MAX];
	u8 dbg_dest_reg_num;

	enum iwl_d0i3_mode d0i3_mode;

	/* pointer to trans specific struct */
	/*Ensure that this pointer will always be aligned to sizeof pointer */
	char trans_specific[0] __aligned(sizeof(void *));
+1 −0
Original line number Diff line number Diff line
@@ -850,6 +850,7 @@ iwl_mvm_sta_from_staid_protected(struct iwl_mvm *mvm, u8 sta_id)
static inline bool iwl_mvm_is_d0i3_supported(struct iwl_mvm *mvm)
{
	return mvm->trans->cfg->d0i3 &&
	       mvm->trans->d0i3_mode != IWL_D0I3_MODE_OFF &&
	       (mvm->fw->ucode_capa.capa[0] & IWL_UCODE_TLV_CAPA_D0I3_SUPPORT);
}