iwlwifi: acpi: make iwl_get_bios_mcc() use the common acpi functions
authorLuca Coelho <luciano.coelho@intel.com>
Tue, 26 Sep 2017 12:33:56 +0000 (15:33 +0300)
committerLuca Coelho <luciano.coelho@intel.com>
Fri, 6 Oct 2017 12:22:31 +0000 (15:22 +0300)
The way iwl_get_bios_mcc() gets the WiFi package and checks for its
integrity is almost identical to the new iwl_acpi_get_wifi_pkg()
function.  Instead of having duplicate code, convert it to use the
common code.

Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
drivers/net/wireless/intel/iwlwifi/fw/acpi.h
drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c
drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.h

index f5c8c856311affe2810c9754d2c37e203551ed83..a7deb62f3f86b0cdff3feaa8288504550a6ee56a 100644 (file)
@@ -85,6 +85,7 @@
 #define ACPI_EWRD_WIFI_DATA_SIZE       ((ACPI_SAR_PROFILE_NUM - 1) * \
                                         ACPI_SAR_TABLE_SIZE + 3)
 #define ACPI_WGDS_WIFI_DATA_SIZE       18
+#define ACPI_WRDD_WIFI_DATA_SIZE       2
 #define ACPI_SPLC_WIFI_DATA_SIZE       2
 
 #define ACPI_WGDS_NUM_BANDS            2
index 2ece3c531b885cdf94e33e234f6b2872369974de..d98318f93b9ed784602e80b98b626d00e8a9cd2c 100644 (file)
@@ -945,64 +945,36 @@ iwl_parse_nvm_mcc_info(struct device *dev, const struct iwl_cfg *cfg,
 }
 IWL_EXPORT_SYMBOL(iwl_parse_nvm_mcc_info);
 
-#ifdef CONFIG_ACPI
-static u32 iwl_wrdd_get_mcc(struct device *dev, union acpi_object *wrdd)
-{
-       union acpi_object *mcc_pkg, *domain_type, *mcc_value;
-       u32 i;
-
-       if (wrdd->type != ACPI_TYPE_PACKAGE ||
-           wrdd->package.count < 2 ||
-           wrdd->package.elements[0].type != ACPI_TYPE_INTEGER ||
-           wrdd->package.elements[0].integer.value != 0) {
-               IWL_DEBUG_EEPROM(dev, "Unsupported wrdd structure\n");
-               return 0;
-       }
-
-       for (i = 1 ; i < wrdd->package.count ; ++i) {
-               mcc_pkg = &wrdd->package.elements[i];
-
-               if (mcc_pkg->type != ACPI_TYPE_PACKAGE ||
-                   mcc_pkg->package.count < 2 ||
-                   mcc_pkg->package.elements[0].type != ACPI_TYPE_INTEGER ||
-                   mcc_pkg->package.elements[1].type != ACPI_TYPE_INTEGER) {
-                       mcc_pkg = NULL;
-                       continue;
-               }
-
-               domain_type = &mcc_pkg->package.elements[0];
-               if (domain_type->integer.value == ACPI_WIFI_DOMAIN)
-                       break;
-
-               mcc_pkg = NULL;
-       }
-
-       if (mcc_pkg) {
-               mcc_value = &mcc_pkg->package.elements[1];
-               return mcc_value->integer.value;
-       }
-
-       return 0;
-}
-
 int iwl_get_bios_mcc(struct device *dev, char *mcc)
 {
-       union acpi_object *data;
+       union acpi_object *wifi_pkg, *data;
        u32 mcc_val;
+       int ret;
 
        data = iwl_acpi_get_object(dev, ACPI_WRDD_METHOD);
        if (IS_ERR(data))
                return PTR_ERR(data);
 
-       mcc_val = iwl_wrdd_get_mcc(dev, data);
-       kfree(data);
-       if (!mcc_val)
-               return -ENOENT;
+       wifi_pkg = iwl_acpi_get_wifi_pkg(dev, data, ACPI_WRDD_WIFI_DATA_SIZE);
+       if (IS_ERR(wifi_pkg)) {
+               ret = PTR_ERR(wifi_pkg);
+               goto out_free;
+       }
+
+       if (wifi_pkg->package.elements[1].type != ACPI_TYPE_INTEGER) {
+               ret = -EINVAL;
+               goto out_free;
+       }
+
+       mcc_val = wifi_pkg->package.elements[1].integer.value;
 
        mcc[0] = (mcc_val >> 8) & 0xff;
        mcc[1] = mcc_val & 0xff;
        mcc[2] = '\0';
-       return 0;
+
+       ret = 0;
+out_free:
+       kfree(data);
+       return ret;
 }
 IWL_EXPORT_SYMBOL(iwl_get_bios_mcc);
-#endif
index 2d1a24dd8410947c0095458b3e2925a7cee6c62d..a39bd5c17c26ea2c5c88d421065710b40d8e0a9d 100644 (file)
@@ -109,7 +109,6 @@ struct ieee80211_regdomain *
 iwl_parse_nvm_mcc_info(struct device *dev, const struct iwl_cfg *cfg,
                       int num_of_ch, __le32 *channels, u16 fw_mcc);
 
-#ifdef CONFIG_ACPI
 /**
  * iwl_get_bios_mcc - read MCC from BIOS, if available
  *
@@ -119,11 +118,5 @@ iwl_parse_nvm_mcc_info(struct device *dev, const struct iwl_cfg *cfg,
  * This function tries to read the current MCC from ACPI if available.
  */
 int iwl_get_bios_mcc(struct device *dev, char *mcc);
-#else
-static inline int iwl_get_bios_mcc(struct device *dev, char *mcc)
-{
-       return -ENOENT;
-}
-#endif
 
 #endif /* __iwl_nvm_parse_h__ */