wifi: iwlwifi: prepare for reading SPLC from UEFI
authorMiri Korenblit <miriam.rachel.korenblit@intel.com>
Thu, 1 Feb 2024 14:17:25 +0000 (16:17 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 2 Feb 2024 13:37:26 +0000 (14:37 +0100)
As the iwl_bios_get_x() functions are now generated using a macro,
and this macro requires the all iwl_acpi_get_x() to have the same
prototype, change iwl_acpi_get_pwr_limit() to return a int
and the actuall power limit will be filled in a pointer function
parameter.

Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Reviewed-by: Gregory Greenman <gregory.greenman@intel.com>
Link: https://msgid.link/20240201155157.4cce81198afe.Ice8b1b97a68da9ec7b5a4799ddb668642198e1af@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/intel/iwlwifi/fw/acpi.c
drivers/net/wireless/intel/iwlwifi/fw/acpi.h
drivers/net/wireless/intel/iwlwifi/mvm/ops.c

index 170c840c321aa776708545a9a9e57b71f829f50c..d6e7de2543b2d599ecdc9e676f7ab5e9c3f4594b 100644 (file)
@@ -362,31 +362,28 @@ out_free:
 }
 IWL_EXPORT_SYMBOL(iwl_acpi_get_mcc);
 
-u64 iwl_acpi_get_pwr_limit(struct device *dev)
+int iwl_acpi_get_pwr_limit(struct iwl_fw_runtime *fwrt, u64 *dflt_pwr_limit)
 {
        union acpi_object *data, *wifi_pkg;
-       u64 dflt_pwr_limit;
-       int tbl_rev;
+       int tbl_rev, ret = -EINVAL;
 
-       data = iwl_acpi_get_object(dev, ACPI_SPLC_METHOD);
-       if (IS_ERR(data)) {
-               dflt_pwr_limit = 0;
+       *dflt_pwr_limit = 0;
+       data = iwl_acpi_get_object(fwrt->dev, ACPI_SPLC_METHOD);
+       if (IS_ERR(data))
                goto out;
-       }
 
-       wifi_pkg = iwl_acpi_get_wifi_pkg(dev, data,
+       wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data,
                                         ACPI_SPLC_WIFI_DATA_SIZE, &tbl_rev);
        if (IS_ERR(wifi_pkg) || tbl_rev != 0 ||
-           wifi_pkg->package.elements[1].integer.value != ACPI_TYPE_INTEGER) {
-               dflt_pwr_limit = 0;
+           wifi_pkg->package.elements[1].integer.value != ACPI_TYPE_INTEGER)
                goto out_free;
-       }
 
-       dflt_pwr_limit = wifi_pkg->package.elements[1].integer.value;
+       *dflt_pwr_limit = wifi_pkg->package.elements[1].integer.value;
+       ret = 0;
 out_free:
        kfree(data);
 out:
-       return dflt_pwr_limit;
+       return ret;
 }
 IWL_EXPORT_SYMBOL(iwl_acpi_get_pwr_limit);
 
index 61bfdaa467d4b63f5097d4051099b82744e9da39..f0ed7174a9510b4364243459169fd9ca3db07cf9 100644 (file)
@@ -156,7 +156,7 @@ int iwl_acpi_get_dsm_u32(struct device *dev, int rev, int func,
  */
 int iwl_acpi_get_mcc(struct device *dev, char *mcc);
 
-u64 iwl_acpi_get_pwr_limit(struct device *dev);
+int iwl_acpi_get_pwr_limit(struct iwl_fw_runtime *fwrt, u64 *dflt_pwr_limit);
 
 /*
  * iwl_acpi_get_eckv - read external clock validation from ACPI, if available
@@ -212,8 +212,10 @@ static inline int iwl_acpi_get_mcc(struct device *dev, char *mcc)
        return -ENOENT;
 }
 
-static inline u64 iwl_acpi_get_pwr_limit(struct device *dev)
+static inline int iwl_acpi_get_pwr_limit(struct iwl_fw_runtime *fwrt,
+                                        u64 *dflt_pwr_limit)
 {
+       *dflt_pwr_limit = 0;
        return 0;
 }
 
index 1b41318e1e5500e7fcba1f1e86edeb596d30362a..0e7b66a20b7c4d07ff18c7edb2c4aaaf03cf8bd7 100644 (file)
@@ -689,7 +689,7 @@ static u32 iwl_mvm_min_backoff(struct iwl_mvm *mvm)
        if (!backoff)
                return 0;
 
-       dflt_pwr_limit = iwl_acpi_get_pwr_limit(mvm->dev);
+       iwl_acpi_get_pwr_limit(&mvm->fwrt, &dflt_pwr_limit);
 
        while (backoff->pwr) {
                if (dflt_pwr_limit >= backoff->pwr)