diff options
Diffstat (limited to 'drivers/net/wireless/intel/iwlwifi/mvm')
-rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mvm/fw.c | 105 |
1 files changed, 19 insertions, 86 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c index 83485493a79a..b2a9e7de15b7 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c @@ -66,7 +66,6 @@ *****************************************************************************/ #include <net/mac80211.h> #include <linux/netdevice.h> -#include <linux/acpi.h> #include "iwl-trans.h" #include "iwl-op-mode.h" @@ -76,6 +75,7 @@ #include "iwl-io.h" /* for iwl_mvm_rx_card_state_notif */ #include "iwl-prph.h" #include "iwl-eeprom-parse.h" +#include "fw/acpi.h" #include "mvm.h" #include "fw/dbg.h" @@ -660,37 +660,15 @@ static union acpi_object *iwl_mvm_sar_find_wifi_pkg(struct iwl_mvm *mvm, static int iwl_mvm_sar_get_wrds_table(struct iwl_mvm *mvm) { - union acpi_object *wifi_pkg, *table; - acpi_handle root_handle; - acpi_handle handle; - struct acpi_buffer wrds = {ACPI_ALLOCATE_BUFFER, NULL}; - acpi_status status; + union acpi_object *wifi_pkg, *table, *data; bool enabled; int ret; - root_handle = ACPI_HANDLE(mvm->dev); - if (!root_handle) { - IWL_DEBUG_RADIO(mvm, - "Could not retrieve root port ACPI handle\n"); - return -ENOENT; - } - - /* Get the method's handle */ - status = acpi_get_handle(root_handle, (acpi_string)ACPI_WRDS_METHOD, - &handle); - if (ACPI_FAILURE(status)) { - IWL_DEBUG_RADIO(mvm, "WRDS method not found\n"); - return -ENOENT; - } - - /* Call WRDS with no arguments */ - status = acpi_evaluate_object(handle, NULL, NULL, &wrds); - if (ACPI_FAILURE(status)) { - IWL_DEBUG_RADIO(mvm, "WRDS invocation failed (0x%x)\n", status); - return -ENOENT; - } + data = iwl_acpi_get_object(mvm->dev, ACPI_WRDS_METHOD); + if (IS_ERR(data)) + return PTR_ERR(data); - wifi_pkg = iwl_mvm_sar_find_wifi_pkg(mvm, wrds.pointer, + wifi_pkg = iwl_mvm_sar_find_wifi_pkg(mvm, data, ACPI_WRDS_WIFI_DATA_SIZE); if (IS_ERR(wifi_pkg)) { ret = PTR_ERR(wifi_pkg); @@ -712,45 +690,22 @@ static int iwl_mvm_sar_get_wrds_table(struct iwl_mvm *mvm) */ ret = iwl_mvm_sar_set_profile(mvm, table, &mvm->sar_profiles[0], enabled); - out_free: - kfree(wrds.pointer); + kfree(data); return ret; } static int iwl_mvm_sar_get_ewrd_table(struct iwl_mvm *mvm) { - union acpi_object *wifi_pkg; - acpi_handle root_handle; - acpi_handle handle; - struct acpi_buffer ewrd = {ACPI_ALLOCATE_BUFFER, NULL}; - acpi_status status; + union acpi_object *wifi_pkg, *data; bool enabled; int i, n_profiles, ret; - root_handle = ACPI_HANDLE(mvm->dev); - if (!root_handle) { - IWL_DEBUG_RADIO(mvm, - "Could not retrieve root port ACPI handle\n"); - return -ENOENT; - } + data = iwl_acpi_get_object(mvm->dev, ACPI_EWRD_METHOD); + if (IS_ERR(data)) + return PTR_ERR(data); - /* Get the method's handle */ - status = acpi_get_handle(root_handle, (acpi_string)ACPI_EWRD_METHOD, - &handle); - if (ACPI_FAILURE(status)) { - IWL_DEBUG_RADIO(mvm, "EWRD method not found\n"); - return -ENOENT; - } - - /* Call EWRD with no arguments */ - status = acpi_evaluate_object(handle, NULL, NULL, &ewrd); - if (ACPI_FAILURE(status)) { - IWL_DEBUG_RADIO(mvm, "EWRD invocation failed (0x%x)\n", status); - return -ENOENT; - } - - wifi_pkg = iwl_mvm_sar_find_wifi_pkg(mvm, ewrd.pointer, + wifi_pkg = iwl_mvm_sar_find_wifi_pkg(mvm, data, ACPI_EWRD_WIFI_DATA_SIZE); if (IS_ERR(wifi_pkg)) { ret = PTR_ERR(wifi_pkg); @@ -792,43 +747,21 @@ static int iwl_mvm_sar_get_ewrd_table(struct iwl_mvm *mvm) } out_free: - kfree(ewrd.pointer); + kfree(data); return ret; } static int iwl_mvm_sar_get_wgds_table(struct iwl_mvm *mvm) { - union acpi_object *wifi_pkg; - acpi_handle root_handle; - acpi_handle handle; - struct acpi_buffer wgds = {ACPI_ALLOCATE_BUFFER, NULL}; - acpi_status status; + union acpi_object *wifi_pkg, *data; int i, j, ret; int idx = 1; - root_handle = ACPI_HANDLE(mvm->dev); - if (!root_handle) { - IWL_DEBUG_RADIO(mvm, - "Could not retrieve root port ACPI handle\n"); - return -ENOENT; - } - - /* Get the method's handle */ - status = acpi_get_handle(root_handle, (acpi_string)ACPI_WGDS_METHOD, - &handle); - if (ACPI_FAILURE(status)) { - IWL_DEBUG_RADIO(mvm, "WGDS method not found\n"); - return -ENOENT; - } - - /* Call WGDS with no arguments */ - status = acpi_evaluate_object(handle, NULL, NULL, &wgds); - if (ACPI_FAILURE(status)) { - IWL_DEBUG_RADIO(mvm, "WGDS invocation failed (0x%x)\n", status); - return -ENOENT; - } + data = iwl_acpi_get_object(mvm->dev, ACPI_WGDS_METHOD); + if (IS_ERR(data)) + return PTR_ERR(data); - wifi_pkg = iwl_mvm_sar_find_wifi_pkg(mvm, wgds.pointer, + wifi_pkg = iwl_mvm_sar_find_wifi_pkg(mvm, data, ACPI_WGDS_WIFI_DATA_SIZE); if (IS_ERR(wifi_pkg)) { ret = PTR_ERR(wifi_pkg); @@ -851,7 +784,7 @@ static int iwl_mvm_sar_get_wgds_table(struct iwl_mvm *mvm) } ret = 0; out_free: - kfree(wgds.pointer); + kfree(data); return ret; } |