iwlwifi: mvm: refactor ACPI DSM evaluation function
authorHarish Mitty <harish.mitty@intel.com>
Wed, 31 Mar 2021 09:14:51 +0000 (12:14 +0300)
committerLuca Coelho <luciano.coelho@intel.com>
Wed, 14 Apr 2021 09:07:18 +0000 (12:07 +0300)
Instead of implementing the DSM evaluation function in the MVM code,
refactor it so it can be generalized and part of the common ACPI
implementation.

Signed-off-by: Harish Mitty <harish.mitty@intel.com>
[reworded subject and commit message]
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Link: https://lore.kernel.org/r/iwlwifi.20210331121101.a24af3551aac.I8e6bd5eb05f853b6331fa4823750f7ba8ffe46e6@changeid
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
drivers/net/wireless/intel/iwlwifi/fw/acpi.c
drivers/net/wireless/intel/iwlwifi/fw/acpi.h
drivers/net/wireless/intel/iwlwifi/mvm/fw.c

index 874cc110d97fa070b9279a19a3d662217a400e2e..eecc76a6e408cd8cf5b4331e3fc333ef79d41c93 100644 (file)
@@ -696,20 +696,27 @@ int iwl_sar_geo_init(struct iwl_fw_runtime *fwrt,
 }
 IWL_EXPORT_SYMBOL(iwl_sar_geo_init);
 
-u32 iwl_acpi_eval_dsm_11ax_enablement(struct device *dev)
+static u32 iwl_acpi_eval_dsm_func(struct device *dev, enum iwl_dsm_funcs_rev_0 eval_func)
 {
        union acpi_object *obj;
        u32 ret;
 
        obj = iwl_acpi_get_dsm_object(dev, 0,
-                                     DSM_FUNC_11AX_ENABLEMENT, NULL,
+                                     eval_func, NULL,
                                      &iwl_guid);
-       if (IS_ERR(obj))
+
+       if (IS_ERR(obj)) {
+               IWL_DEBUG_DEV_RADIO(dev,
+                                   "ACPI: DSM func '%d': Got Error in obj = %ld\n",
+                                   eval_func,
+                                   PTR_ERR(obj));
                return 0;
+       }
 
        if (obj->type != ACPI_TYPE_INTEGER) {
                IWL_DEBUG_DEV_RADIO(dev,
-                                   "ACPI: DSM method did not return a valid object, type=%d\n",
+                                   "ACPI: DSM func '%d' did not return a valid object, type=%d\n",
+                                   eval_func,
                                    obj->type);
                ret = 0;
                goto out;
@@ -717,10 +724,49 @@ u32 iwl_acpi_eval_dsm_11ax_enablement(struct device *dev)
 
        ret = obj->integer.value;
        IWL_DEBUG_DEV_RADIO(dev,
-                           "ACPI: DSM method evaluated: func=DSM_FUNC_11AX_ENABLEMENT, ret=%d\n",
+                           "ACPI: DSM method evaluated: func='%d', ret=%d\n",
+                           eval_func,
                            ret);
 out:
        ACPI_FREE(obj);
        return ret;
 }
-IWL_EXPORT_SYMBOL(iwl_acpi_eval_dsm_11ax_enablement);
+
+__le32 iwl_acpi_get_lari_config_bitmap(struct iwl_fw_runtime *fwrt)
+{
+       u32 ret;
+       __le32 config_bitmap = 0;
+
+       /*
+        ** Evaluate func 'DSM_FUNC_ENABLE_INDONESIA_5G2'
+        */
+       ret = iwl_acpi_eval_dsm_func(fwrt->dev, DSM_FUNC_ENABLE_INDONESIA_5G2);
+
+       if (ret == DSM_VALUE_INDONESIA_ENABLE)
+               config_bitmap |=
+                       cpu_to_le32(LARI_CONFIG_ENABLE_5G2_IN_INDONESIA_MSK);
+
+       /*
+        ** Evaluate func 'DSM_FUNC_DISABLE_SRD'
+        */
+       ret = iwl_acpi_eval_dsm_func(fwrt->dev, DSM_FUNC_DISABLE_SRD);
+
+       if (ret == DSM_VALUE_SRD_PASSIVE)
+               config_bitmap |=
+                       cpu_to_le32(LARI_CONFIG_CHANGE_ETSI_TO_PASSIVE_MSK);
+
+       else if (ret == DSM_VALUE_SRD_DISABLE)
+               config_bitmap |=
+                       cpu_to_le32(LARI_CONFIG_CHANGE_ETSI_TO_DISABLED_MSK);
+
+       /*
+        ** Evaluate func 'DSM_FUNC_11AX_ENABLEMENT'
+        */
+       ret = iwl_acpi_eval_dsm_func(fwrt->dev, DSM_FUNC_11AX_ENABLEMENT);
+
+       config_bitmap |=
+               cpu_to_le32((ret &= IWL_11AX_UKRAINE_MASK) << IWL_11AX_UKRAINE_SHIFT);
+
+       return config_bitmap;
+}
+IWL_EXPORT_SYMBOL(iwl_acpi_get_lari_config_bitmap);
index b7389f41a009417c456d0eac2b9d52663a02be3f..d16e6ec08c9f83fbeefd54525b8bec95be6eca79 100644 (file)
@@ -161,7 +161,7 @@ int iwl_sar_geo_init(struct iwl_fw_runtime *fwrt,
 int iwl_acpi_get_tas(struct iwl_fw_runtime *fwrt, __le32 *block_list_array,
                     int *block_list_size);
 
-u32 iwl_acpi_eval_dsm_11ax_enablement(struct device *dev);
+__le32 iwl_acpi_get_lari_config_bitmap(struct iwl_fw_runtime *fwrt);
 
 #else /* CONFIG_ACPI */
 
@@ -239,7 +239,7 @@ static inline int iwl_acpi_get_tas(struct iwl_fw_runtime *fwrt,
        return -ENOENT;
 }
 
-static inline u32 iwl_acpi_eval_dsm_11ax_enablement(struct device *dev)
+static inline __le32 iwl_acpi_get_lari_config_bitmap(struct iwl_fw_runtime *fwrt)
 {
        return 0;
 }
index ff3967f7c66bf2046343caa512a4a4e0f2df60e1..be831dd2c05ce9d0a4900eb634e5315efcd910b2 100644 (file)
@@ -1112,33 +1112,6 @@ static void iwl_mvm_tas_init(struct iwl_mvm *mvm)
                IWL_DEBUG_RADIO(mvm, "failed to send TAS_CONFIG (%d)\n", ret);
 }
 
-static u8 iwl_mvm_eval_dsm_indonesia_5g2(struct iwl_mvm *mvm)
-{
-       u8 value;
-
-       int ret = iwl_acpi_get_dsm_u8((&mvm->fwrt)->dev, 0,
-                                     DSM_FUNC_ENABLE_INDONESIA_5G2,
-                                     &iwl_guid, &value);
-
-       if (ret < 0)
-               IWL_DEBUG_RADIO(mvm,
-                               "Failed to evaluate DSM function ENABLE_INDONESIA_5G2, ret=%d\n",
-                               ret);
-
-       else if (value >= DSM_VALUE_INDONESIA_MAX)
-               IWL_DEBUG_RADIO(mvm,
-                               "DSM function ENABLE_INDONESIA_5G2 return invalid value, value=%d\n",
-                               value);
-
-       else if (value == DSM_VALUE_INDONESIA_ENABLE) {
-               IWL_DEBUG_RADIO(mvm,
-                               "Evaluated DSM function ENABLE_INDONESIA_5G2: Enabling 5g2\n");
-               return DSM_VALUE_INDONESIA_ENABLE;
-       }
-       /* default behaviour is disabled */
-       return DSM_VALUE_INDONESIA_DISABLE;
-}
-
 static u8 iwl_mvm_eval_dsm_rfi(struct iwl_mvm *mvm)
 {
        u8 value;
@@ -1163,59 +1136,12 @@ static u8 iwl_mvm_eval_dsm_rfi(struct iwl_mvm *mvm)
        return DSM_VALUE_RFI_DISABLE;
 }
 
-static u8 iwl_mvm_eval_dsm_disable_srd(struct iwl_mvm *mvm)
-{
-       u8 value;
-       int ret = iwl_acpi_get_dsm_u8((&mvm->fwrt)->dev, 0,
-                                     DSM_FUNC_DISABLE_SRD,
-                                     &iwl_guid, &value);
-
-       if (ret < 0)
-               IWL_DEBUG_RADIO(mvm,
-                               "Failed to evaluate DSM function DISABLE_SRD, ret=%d\n",
-                               ret);
-
-       else if (value >= DSM_VALUE_SRD_MAX)
-               IWL_DEBUG_RADIO(mvm,
-                               "DSM function DISABLE_SRD return invalid value, value=%d\n",
-                               value);
-
-       else if (value == DSM_VALUE_SRD_PASSIVE) {
-               IWL_DEBUG_RADIO(mvm,
-                               "Evaluated DSM function DISABLE_SRD: setting SRD to passive\n");
-               return DSM_VALUE_SRD_PASSIVE;
-
-       } else if (value == DSM_VALUE_SRD_DISABLE) {
-               IWL_DEBUG_RADIO(mvm,
-                               "Evaluated DSM function DISABLE_SRD: disabling SRD\n");
-               return DSM_VALUE_SRD_DISABLE;
-       }
-       /* default behaviour is active */
-       return DSM_VALUE_SRD_ACTIVE;
-}
-
 static void iwl_mvm_lari_cfg(struct iwl_mvm *mvm)
 {
-       u8 ret;
        int cmd_ret;
        struct iwl_lari_config_change_cmd_v2 cmd = {};
 
-       if (iwl_mvm_eval_dsm_indonesia_5g2(mvm) == DSM_VALUE_INDONESIA_ENABLE)
-               cmd.config_bitmap |=
-                       cpu_to_le32(LARI_CONFIG_ENABLE_5G2_IN_INDONESIA_MSK);
-
-       ret = iwl_mvm_eval_dsm_disable_srd(mvm);
-       if (ret == DSM_VALUE_SRD_PASSIVE)
-               cmd.config_bitmap |=
-                       cpu_to_le32(LARI_CONFIG_CHANGE_ETSI_TO_PASSIVE_MSK);
-
-       else if (ret == DSM_VALUE_SRD_DISABLE)
-               cmd.config_bitmap |=
-                       cpu_to_le32(LARI_CONFIG_CHANGE_ETSI_TO_DISABLED_MSK);
-
-       ret = iwl_acpi_eval_dsm_11ax_enablement((&mvm->fwrt)->dev);
-       cmd.config_bitmap |=
-               cpu_to_le32((ret &= IWL_11AX_UKRAINE_MASK) << IWL_11AX_UKRAINE_SHIFT);
+       cmd.config_bitmap = iwl_acpi_get_lari_config_bitmap(&mvm->fwrt);
 
        /* apply more config masks here */