diff options
author | Luca Coelho <luciano.coelho@intel.com> | 2017-09-21 14:30:53 +0300 |
---|---|---|
committer | Luca Coelho <luciano.coelho@intel.com> | 2017-10-06 15:22:29 +0300 |
commit | 2fa388cfeb1af9fa94acc7fd1b250fb863fb5d91 (patch) | |
tree | c226aa381d091373ea0e84dc12c42000dc8a26c3 /drivers/net/wireless/intel/iwlwifi/mvm/fw.c | |
parent | e7a3b8d87910bbd653908091242263c4e48d588f (diff) |
iwlwifi: acpi: generalize iwl_mvm_sar_find_wifi_pkg()
Move this function to acpi.c, renaming it to iwl_acpi_get_wifi_pkg(),
because it can also be used with other methods (i.e. SPLC and WRDD).
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Diffstat (limited to 'drivers/net/wireless/intel/iwlwifi/mvm/fw.c')
-rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mvm/fw.c | 60 |
1 files changed, 6 insertions, 54 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c index 789aa7b74110..7a7b72bf1621 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c @@ -599,54 +599,6 @@ static int iwl_mvm_sar_set_profile(struct iwl_mvm *mvm, return 0; } -static union acpi_object *iwl_mvm_sar_find_wifi_pkg(struct iwl_mvm *mvm, - union acpi_object *data, - int data_size) -{ - union acpi_object *wifi_pkg = NULL; - int i; - - /* - * We need at least two packages, one for the revision and one - * for the data itself. Also check that the revision is valid - * (i.e. it is an integer set to 0). - */ - if (data->type != ACPI_TYPE_PACKAGE || - data->package.count < 2 || - data->package.elements[0].type != ACPI_TYPE_INTEGER || - data->package.elements[0].integer.value != 0) { - IWL_DEBUG_RADIO(mvm, "Unsupported packages structure\n"); - return ERR_PTR(-EINVAL); - } - - /* loop through all the packages to find the one for WiFi */ - for (i = 1; i < data->package.count; i++) { - union acpi_object *domain; - - wifi_pkg = &data->package.elements[i]; - - /* Skip anything that is not a package with the right - * amount of elements (i.e. domain_type, - * enabled/disabled plus the actual data size. - */ - if (wifi_pkg->type != ACPI_TYPE_PACKAGE || - wifi_pkg->package.count != data_size) - continue; - - domain = &wifi_pkg->package.elements[0]; - if (domain->type == ACPI_TYPE_INTEGER && - domain->integer.value == ACPI_WIFI_DOMAIN) - break; - - wifi_pkg = NULL; - } - - if (!wifi_pkg) - return ERR_PTR(-ENOENT); - - return wifi_pkg; -} - static int iwl_mvm_sar_get_wrds_table(struct iwl_mvm *mvm) { union acpi_object *wifi_pkg, *table, *data; @@ -657,8 +609,8 @@ static int iwl_mvm_sar_get_wrds_table(struct iwl_mvm *mvm) if (IS_ERR(data)) return PTR_ERR(data); - wifi_pkg = iwl_mvm_sar_find_wifi_pkg(mvm, data, - ACPI_WRDS_WIFI_DATA_SIZE); + wifi_pkg = iwl_acpi_get_wifi_pkg(mvm->dev, data, + ACPI_WRDS_WIFI_DATA_SIZE); if (IS_ERR(wifi_pkg)) { ret = PTR_ERR(wifi_pkg); goto out_free; @@ -694,8 +646,8 @@ static int iwl_mvm_sar_get_ewrd_table(struct iwl_mvm *mvm) if (IS_ERR(data)) return PTR_ERR(data); - wifi_pkg = iwl_mvm_sar_find_wifi_pkg(mvm, data, - ACPI_EWRD_WIFI_DATA_SIZE); + wifi_pkg = iwl_acpi_get_wifi_pkg(mvm->dev, data, + ACPI_EWRD_WIFI_DATA_SIZE); if (IS_ERR(wifi_pkg)) { ret = PTR_ERR(wifi_pkg); goto out_free; @@ -750,8 +702,8 @@ static int iwl_mvm_sar_get_wgds_table(struct iwl_mvm *mvm) if (IS_ERR(data)) return PTR_ERR(data); - wifi_pkg = iwl_mvm_sar_find_wifi_pkg(mvm, data, - ACPI_WGDS_WIFI_DATA_SIZE); + wifi_pkg = iwl_acpi_get_wifi_pkg(mvm->dev, data, + ACPI_WGDS_WIFI_DATA_SIZE); if (IS_ERR(wifi_pkg)) { ret = PTR_ERR(wifi_pkg); goto out_free; |