Lines Matching +full:entry +full:- +full:method
1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
4 * Copyright (C) 2019-2021 Intel Corporation
7 #include "iwl-drv.h"
8 #include "iwl-debug.h"
22 static int iwl_acpi_get_handle(struct device *dev, acpi_string method, in iwl_acpi_get_handle() argument
32 return -ENOENT; in iwl_acpi_get_handle()
35 status = acpi_get_handle(root_handle, method, ret_handle); in iwl_acpi_get_handle()
38 "ACPI: %s method not found\n", method); in iwl_acpi_get_handle()
39 return -ENOENT; in iwl_acpi_get_handle()
44 void *iwl_acpi_get_object(struct device *dev, acpi_string method) in iwl_acpi_get_object() argument
51 ret = iwl_acpi_get_handle(dev, method, &handle); in iwl_acpi_get_object()
53 return ERR_PTR(-ENOENT); in iwl_acpi_get_object()
55 /* Call the method with no arguments */ in iwl_acpi_get_object()
59 "ACPI: %s method invocation failed (status: 0x%x)\n", in iwl_acpi_get_object()
60 method, status); in iwl_acpi_get_object()
61 return ERR_PTR(-ENOENT); in iwl_acpi_get_object()
68 * Generic function for evaluating a method defined in the device specific
69 * method (DSM) interface. The returned acpi object must be freed by calling
82 "ACPI: DSM method invocation failed (rev: %d, func:%d)\n", in iwl_acpi_get_dsm_object()
84 return ERR_PTR(-ENOENT); in iwl_acpi_get_dsm_object()
108 return -ENOENT; in iwl_acpi_get_dsm_integer()
111 if (obj->type == ACPI_TYPE_INTEGER) { in iwl_acpi_get_dsm_integer()
112 *value = obj->integer.value; in iwl_acpi_get_dsm_integer()
113 } else if (obj->type == ACPI_TYPE_BUFFER) { in iwl_acpi_get_dsm_integer()
117 return -EINVAL; in iwl_acpi_get_dsm_integer()
120 if (obj->buffer.length != expected_size) in iwl_acpi_get_dsm_integer()
123 obj->buffer.length); in iwl_acpi_get_dsm_integer()
126 memcpy(&le_value, obj->buffer.pointer, in iwl_acpi_get_dsm_integer()
127 min_t(size_t, expected_size, (size_t)obj->buffer.length)); in iwl_acpi_get_dsm_integer()
131 "ACPI: DSM method did not return a valid object, type=%d\n", in iwl_acpi_get_dsm_integer()
132 obj->type); in iwl_acpi_get_dsm_integer()
133 ret = -EINVAL; in iwl_acpi_get_dsm_integer()
138 "ACPI: DSM method evaluated: func=%d, ret=%d\n", in iwl_acpi_get_dsm_integer()
195 * We need at least one entry in the wifi package that in iwl_acpi_get_wifi_pkg()
196 * describes the domain, and one more entry, otherwise there's in iwl_acpi_get_wifi_pkg()
200 return ERR_PTR(-EINVAL); in iwl_acpi_get_wifi_pkg()
208 if (data->type != ACPI_TYPE_PACKAGE || in iwl_acpi_get_wifi_pkg()
209 data->package.count < 2 || in iwl_acpi_get_wifi_pkg()
210 data->package.elements[0].type != ACPI_TYPE_INTEGER) { in iwl_acpi_get_wifi_pkg()
212 return ERR_PTR(-EINVAL); in iwl_acpi_get_wifi_pkg()
215 *tbl_rev = data->package.elements[0].integer.value; in iwl_acpi_get_wifi_pkg()
218 for (i = 1; i < data->package.count; i++) { in iwl_acpi_get_wifi_pkg()
221 wifi_pkg = &data->package.elements[i]; in iwl_acpi_get_wifi_pkg()
224 if (wifi_pkg->type != ACPI_TYPE_PACKAGE || in iwl_acpi_get_wifi_pkg()
225 wifi_pkg->package.count != data_size) in iwl_acpi_get_wifi_pkg()
228 domain = &wifi_pkg->package.elements[0]; in iwl_acpi_get_wifi_pkg()
229 if (domain->type == ACPI_TYPE_INTEGER && in iwl_acpi_get_wifi_pkg()
230 domain->integer.value == ACPI_WIFI_DOMAIN) in iwl_acpi_get_wifi_pkg()
234 return ERR_PTR(-ENOENT); in iwl_acpi_get_wifi_pkg()
249 data = iwl_acpi_get_object(fwrt->dev, ACPI_WTAS_METHOD); in iwl_acpi_get_tas()
253 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data, in iwl_acpi_get_tas()
261 if (wifi_pkg->package.elements[0].type != ACPI_TYPE_INTEGER || in iwl_acpi_get_tas()
263 ret = -EINVAL; in iwl_acpi_get_tas()
267 enabled = !!wifi_pkg->package.elements[1].integer.value; in iwl_acpi_get_tas()
270 *block_list_size = -1; in iwl_acpi_get_tas()
276 if (wifi_pkg->package.elements[2].type != ACPI_TYPE_INTEGER || in iwl_acpi_get_tas()
277 wifi_pkg->package.elements[2].integer.value > in iwl_acpi_get_tas()
280 wifi_pkg->package.elements[1].integer.value); in iwl_acpi_get_tas()
281 ret = -EINVAL; in iwl_acpi_get_tas()
284 *block_list_size = wifi_pkg->package.elements[2].integer.value; in iwl_acpi_get_tas()
290 ret = -EINVAL; in iwl_acpi_get_tas()
297 if (wifi_pkg->package.elements[3 + i].type != in iwl_acpi_get_tas()
301 ret = -EINVAL; in iwl_acpi_get_tas()
305 country = wifi_pkg->package.elements[3 + i].integer.value; in iwl_acpi_get_tas()
334 if (wifi_pkg->package.elements[1].type != ACPI_TYPE_INTEGER || in iwl_acpi_get_mcc()
336 ret = -EINVAL; in iwl_acpi_get_mcc()
340 mcc_val = wifi_pkg->package.elements[1].integer.value; in iwl_acpi_get_mcc()
368 wifi_pkg->package.elements[1].integer.value != ACPI_TYPE_INTEGER) { in iwl_acpi_get_pwr_limit()
373 dflt_pwr_limit = wifi_pkg->package.elements[1].integer.value; in iwl_acpi_get_pwr_limit()
397 if (wifi_pkg->package.elements[1].type != ACPI_TYPE_INTEGER || in iwl_acpi_get_eckv()
399 ret = -EINVAL; in iwl_acpi_get_eckv()
403 *extl_clk = wifi_pkg->package.elements[1].integer.value; in iwl_acpi_get_eckv()
427 profile->chains[i].subbands[j] = 0; in iwl_sar_set_profile()
431 return -EINVAL; in iwl_sar_set_profile()
433 profile->chains[i].subbands[j] = in iwl_sar_set_profile()
442 profile->enabled = enabled; in iwl_sar_set_profile()
459 return -EPERM; in iwl_sar_fill_table()
463 return -EINVAL; in iwl_sar_fill_table()
466 prof = &fwrt->sar_profiles[profs[i] - 1]; in iwl_sar_fill_table()
469 if (!prof->enabled) { in iwl_sar_fill_table()
486 cpu_to_le16(prof->chains[i].subbands[j]); in iwl_sar_fill_table()
488 j, prof->chains[i].subbands[j]); in iwl_sar_fill_table()
520 data = iwl_acpi_get_object(fwrt->dev, ACPI_WRDS_METHOD); in iwl_sar_get_wrds_table()
525 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data, in iwl_sar_get_wrds_table()
541 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data, in iwl_sar_get_wrds_table()
557 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data, in iwl_sar_get_wrds_table()
576 if (wifi_pkg->package.elements[1].type != ACPI_TYPE_INTEGER) { in iwl_sar_get_wrds_table()
577 ret = -EINVAL; in iwl_sar_get_wrds_table()
583 enabled = !!(wifi_pkg->package.elements[1].integer.value); in iwl_sar_get_wrds_table()
586 table = &wifi_pkg->package.elements[2]; in iwl_sar_get_wrds_table()
591 ret = iwl_sar_set_profile(table, &fwrt->sar_profiles[0], enabled, in iwl_sar_get_wrds_table()
607 data = iwl_acpi_get_object(fwrt->dev, ACPI_EWRD_METHOD); in iwl_sar_get_ewrd_table()
612 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data, in iwl_sar_get_ewrd_table()
628 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data, in iwl_sar_get_ewrd_table()
644 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data, in iwl_sar_get_ewrd_table()
663 if (wifi_pkg->package.elements[1].type != ACPI_TYPE_INTEGER || in iwl_sar_get_ewrd_table()
664 wifi_pkg->package.elements[2].type != ACPI_TYPE_INTEGER) { in iwl_sar_get_ewrd_table()
665 ret = -EINVAL; in iwl_sar_get_ewrd_table()
669 enabled = !!(wifi_pkg->package.elements[1].integer.value); in iwl_sar_get_ewrd_table()
670 n_profiles = wifi_pkg->package.elements[2].integer.value; in iwl_sar_get_ewrd_table()
675 * ACPI_SAR_PROFILES_NUM - 1. in iwl_sar_get_ewrd_table()
678 ret = -EINVAL; in iwl_sar_get_ewrd_table()
687 * save them in sar_profiles[1-3] (because we don't in iwl_sar_get_ewrd_table()
690 ret = iwl_sar_set_profile(&wifi_pkg->package.elements[pos], in iwl_sar_get_ewrd_table()
691 &fwrt->sar_profiles[i + 1], enabled, in iwl_sar_get_ewrd_table()
713 data = iwl_acpi_get_object(fwrt->dev, ACPI_WGDS_METHOD); in iwl_sar_get_wgds_table()
718 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data, in iwl_sar_get_wgds_table()
733 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data, in iwl_sar_get_wgds_table()
751 fwrt->geo_rev = tbl_rev; in iwl_sar_get_wgds_table()
754 union acpi_object *entry; in iwl_sar_get_wgds_table() local
762 fwrt->geo_profiles[i].bands[j].max = in iwl_sar_get_wgds_table()
763 fwrt->geo_profiles[i].bands[1].max; in iwl_sar_get_wgds_table()
765 entry = &wifi_pkg->package.elements[idx++]; in iwl_sar_get_wgds_table()
766 if (entry->type != ACPI_TYPE_INTEGER || in iwl_sar_get_wgds_table()
767 entry->integer.value > U8_MAX) { in iwl_sar_get_wgds_table()
768 ret = -EINVAL; in iwl_sar_get_wgds_table()
772 fwrt->geo_profiles[i].bands[j].max = in iwl_sar_get_wgds_table()
773 entry->integer.value; in iwl_sar_get_wgds_table()
779 fwrt->geo_profiles[i].bands[j].chains[k] = in iwl_sar_get_wgds_table()
780 fwrt->geo_profiles[i].bands[1].chains[k]; in iwl_sar_get_wgds_table()
782 entry = &wifi_pkg->package.elements[idx++]; in iwl_sar_get_wgds_table()
783 if (entry->type != ACPI_TYPE_INTEGER || in iwl_sar_get_wgds_table()
784 entry->integer.value > U8_MAX) { in iwl_sar_get_wgds_table()
785 ret = -EINVAL; in iwl_sar_get_wgds_table()
789 fwrt->geo_profiles[i].bands[j].chains[k] = in iwl_sar_get_wgds_table()
790 entry->integer.value; in iwl_sar_get_wgds_table()
816 return IWL_UCODE_SERIAL(fwrt->fw->ucode_ver) >= 38 || in iwl_sar_geo_support()
817 IWL_UCODE_SERIAL(fwrt->fw->ucode_ver) == 17 || in iwl_sar_geo_support()
818 (IWL_UCODE_SERIAL(fwrt->fw->ucode_ver) == 29 && in iwl_sar_geo_support()
819 ((fwrt->trans->hw_rev & CSR_HW_REV_TYPE_MSK) == in iwl_sar_geo_support()
830 return -EOPNOTSUPP; in iwl_sar_geo_init()
837 chain->max_tx_power = in iwl_sar_geo_init()
838 cpu_to_le16(fwrt->geo_profiles[i].bands[j].max); in iwl_sar_geo_init()
839 chain->chain_a = fwrt->geo_profiles[i].bands[j].chains[0]; in iwl_sar_geo_init()
840 chain->chain_b = fwrt->geo_profiles[i].bands[j].chains[1]; in iwl_sar_geo_init()
844 fwrt->geo_profiles[i].bands[j].chains[0], in iwl_sar_geo_init()
845 fwrt->geo_profiles[i].bands[j].chains[1], in iwl_sar_geo_init()
846 fwrt->geo_profiles[i].bands[j].max); in iwl_sar_geo_init()
863 ret = iwl_acpi_get_dsm_u8(fwrt->dev, 0, in iwl_acpi_get_lari_config_bitmap()
874 ret = iwl_acpi_get_dsm_u8(fwrt->dev, 0, in iwl_acpi_get_lari_config_bitmap()