iwlwifi: mvm: check for d0i3 fw capability
authorEliad Peller <eliad@wizery.com>
Mon, 24 Feb 2014 10:54:37 +0000 (12:54 +0200)
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Sun, 9 Mar 2014 17:16:47 +0000 (19:16 +0200)
Check for both cfg->d0i3 and fw d0i3 support in order
to enable d0i3 support.

Signed-off-by: Eliad Peller <eliadx.peller@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
drivers/net/wireless/iwlwifi/iwl-fw.h
drivers/net/wireless/iwlwifi/mvm/mac80211.c
drivers/net/wireless/iwlwifi/mvm/mvm.h

index f04ff871dc6d5f4a7bc52f6651bb06549c473e0c..18f867c4df555c642113f0b2264244d9ad709cf9 100644 (file)
@@ -125,6 +125,14 @@ enum iwl_ucode_tlv_flag {
        IWL_UCODE_TLV_FLAGS_GO_UAPSD            = BIT(30),
 };
 
+/**
+ * enum iwl_ucode_tlv_capa - ucode capabilities
+ * @IWL_UCODE_TLV_CAPA_D0I3_SUPPORT: supports D0i3
+ */
+enum iwl_ucode_tlv_capa {
+       IWL_UCODE_TLV_CAPA_D0I3_SUPPORT         = BIT(0),
+};
+
 /* The default calibrate table size if not specified by firmware file */
 #define IWL_DEFAULT_STANDARD_PHY_CALIBRATE_TBL_SIZE    18
 #define IWL_MAX_STANDARD_PHY_CALIBRATE_TBL_SIZE                19
index d74cc43ca593575dbc1f87bfbc75f23d21a66783..41b9e65f6a3f7b7a0a15773bc69b7aef67089922 100644 (file)
@@ -205,7 +205,7 @@ static const struct iwl_fw_bcast_filter iwl_mvm_default_bcast_filters[] = {
 
 void iwl_mvm_ref(struct iwl_mvm *mvm, enum iwl_mvm_ref_type ref_type)
 {
-       if (!mvm->trans->cfg->d0i3)
+       if (!iwl_mvm_is_d0i3_supported(mvm))
                return;
 
        IWL_DEBUG_RPM(mvm, "Take mvm reference - type %d\n", ref_type);
@@ -215,7 +215,7 @@ void iwl_mvm_ref(struct iwl_mvm *mvm, enum iwl_mvm_ref_type ref_type)
 
 void iwl_mvm_unref(struct iwl_mvm *mvm, enum iwl_mvm_ref_type ref_type)
 {
-       if (!mvm->trans->cfg->d0i3)
+       if (!iwl_mvm_is_d0i3_supported(mvm))
                return;
 
        IWL_DEBUG_RPM(mvm, "Leave mvm reference - type %d\n", ref_type);
@@ -228,7 +228,7 @@ iwl_mvm_unref_all_except(struct iwl_mvm *mvm, enum iwl_mvm_ref_type ref)
 {
        int i;
 
-       if (!mvm->trans->cfg->d0i3)
+       if (!iwl_mvm_is_d0i3_supported(mvm))
                return;
 
        for_each_set_bit(i, mvm->ref_bitmap, IWL_MVM_REF_COUNT) {
index 5fb51099f99dcb3e54f489af01af86cec6fd831f..3511bf79abcdc19bcfaa9b7f43de40e958946b17 100644 (file)
@@ -656,6 +656,12 @@ iwl_mvm_sta_from_staid_protected(struct iwl_mvm *mvm, u8 sta_id)
        return iwl_mvm_sta_from_mac80211(sta);
 }
 
+static inline bool iwl_mvm_is_d0i3_supported(struct iwl_mvm *mvm)
+{
+       return mvm->trans->cfg->d0i3 &&
+              (mvm->fw->ucode_capa.capa[0] & IWL_UCODE_TLV_CAPA_D0I3_SUPPORT);
+}
+
 extern const u8 iwl_mvm_ac_to_tx_fifo[];
 
 struct iwl_rate_info {