Lines Matching +full:entry +full:- +full:method
9 * Copyright (C) 2019 - 2020 Intel Corporation
25 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
30 * Copyright (C) 2019 - 2020 Intel Corporation
62 #include "iwl-drv.h"
63 #include "iwl-debug.h"
71 static int iwl_acpi_get_handle(struct device *dev, acpi_string method, in iwl_acpi_get_handle() argument
81 return -ENOENT; in iwl_acpi_get_handle()
84 status = acpi_get_handle(root_handle, method, ret_handle); in iwl_acpi_get_handle()
87 "ACPI: %s method not found\n", method); in iwl_acpi_get_handle()
88 return -ENOENT; in iwl_acpi_get_handle()
93 void *iwl_acpi_get_object(struct device *dev, acpi_string method) in iwl_acpi_get_object() argument
100 ret = iwl_acpi_get_handle(dev, method, &handle); in iwl_acpi_get_object()
102 return ERR_PTR(-ENOENT); in iwl_acpi_get_object()
104 /* Call the method with no arguments */ in iwl_acpi_get_object()
108 "ACPI: %s method invocation failed (status: 0x%x)\n", in iwl_acpi_get_object()
109 method, status); in iwl_acpi_get_object()
110 return ERR_PTR(-ENOENT); in iwl_acpi_get_object()
117 * Generic function for evaluating a method defined in the device specific
118 * method (DSM) interface. The returned acpi object must be freed by calling
130 "ACPI: DSM method invocation failed (rev: %d, func:%d)\n", in iwl_acpi_get_dsm_object()
132 return ERR_PTR(-ENOENT); in iwl_acpi_get_dsm_object()
148 return -ENOENT; in iwl_acpi_get_dsm_u8()
150 if (obj->type != ACPI_TYPE_BUFFER) { in iwl_acpi_get_dsm_u8()
152 "ACPI: DSM method did not return a valid object, type=%d\n", in iwl_acpi_get_dsm_u8()
153 obj->type); in iwl_acpi_get_dsm_u8()
154 ret = -EINVAL; in iwl_acpi_get_dsm_u8()
158 if (obj->buffer.length != sizeof(u8)) { in iwl_acpi_get_dsm_u8()
160 "ACPI: DSM method returned invalid buffer, length=%d\n", in iwl_acpi_get_dsm_u8()
161 obj->buffer.length); in iwl_acpi_get_dsm_u8()
162 ret = -EINVAL; in iwl_acpi_get_dsm_u8()
166 ret = obj->buffer.pointer[0]; in iwl_acpi_get_dsm_u8()
168 "ACPI: DSM method evaluated: func=%d, ret=%d\n", in iwl_acpi_get_dsm_u8()
184 * We need at least one entry in the wifi package that in iwl_acpi_get_wifi_pkg()
185 * describes the domain, and one more entry, otherwise there's in iwl_acpi_get_wifi_pkg()
189 return ERR_PTR(-EINVAL); in iwl_acpi_get_wifi_pkg()
197 if (data->type != ACPI_TYPE_PACKAGE || in iwl_acpi_get_wifi_pkg()
198 data->package.count < 2 || in iwl_acpi_get_wifi_pkg()
199 data->package.elements[0].type != ACPI_TYPE_INTEGER || in iwl_acpi_get_wifi_pkg()
200 data->package.elements[0].integer.value > 1) { in iwl_acpi_get_wifi_pkg()
202 return ERR_PTR(-EINVAL); in iwl_acpi_get_wifi_pkg()
205 *tbl_rev = data->package.elements[0].integer.value; in iwl_acpi_get_wifi_pkg()
208 for (i = 1; i < data->package.count; i++) { in iwl_acpi_get_wifi_pkg()
211 wifi_pkg = &data->package.elements[i]; in iwl_acpi_get_wifi_pkg()
214 if (wifi_pkg->type != ACPI_TYPE_PACKAGE || in iwl_acpi_get_wifi_pkg()
215 wifi_pkg->package.count != data_size) in iwl_acpi_get_wifi_pkg()
218 domain = &wifi_pkg->package.elements[0]; in iwl_acpi_get_wifi_pkg()
219 if (domain->type == ACPI_TYPE_INTEGER && in iwl_acpi_get_wifi_pkg()
220 domain->integer.value == ACPI_WIFI_DOMAIN) in iwl_acpi_get_wifi_pkg()
224 return ERR_PTR(-ENOENT); in iwl_acpi_get_wifi_pkg()
239 data = iwl_acpi_get_object(fwrt->dev, ACPI_WTAS_METHOD); in iwl_acpi_get_tas()
243 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data, in iwl_acpi_get_tas()
251 if (wifi_pkg->package.elements[0].type != ACPI_TYPE_INTEGER || in iwl_acpi_get_tas()
253 ret = -EINVAL; in iwl_acpi_get_tas()
257 enabled = !!wifi_pkg->package.elements[0].integer.value; in iwl_acpi_get_tas()
260 *black_list_size = -1; in iwl_acpi_get_tas()
266 if (wifi_pkg->package.elements[1].type != ACPI_TYPE_INTEGER || in iwl_acpi_get_tas()
267 wifi_pkg->package.elements[1].integer.value > in iwl_acpi_get_tas()
270 wifi_pkg->package.elements[1].integer.value); in iwl_acpi_get_tas()
271 ret = -EINVAL; in iwl_acpi_get_tas()
274 *black_list_size = wifi_pkg->package.elements[1].integer.value; in iwl_acpi_get_tas()
280 ret = -EINVAL; in iwl_acpi_get_tas()
287 if (wifi_pkg->package.elements[2 + i].type != in iwl_acpi_get_tas()
291 ret = -EINVAL; in iwl_acpi_get_tas()
295 country = wifi_pkg->package.elements[2 + i].integer.value; in iwl_acpi_get_tas()
324 if (wifi_pkg->package.elements[1].type != ACPI_TYPE_INTEGER || in iwl_acpi_get_mcc()
326 ret = -EINVAL; in iwl_acpi_get_mcc()
330 mcc_val = wifi_pkg->package.elements[1].integer.value; in iwl_acpi_get_mcc()
358 wifi_pkg->package.elements[1].integer.value != ACPI_TYPE_INTEGER) { in iwl_acpi_get_pwr_limit()
363 dflt_pwr_limit = wifi_pkg->package.elements[1].integer.value; in iwl_acpi_get_pwr_limit()
387 if (wifi_pkg->package.elements[1].type != ACPI_TYPE_INTEGER || in iwl_acpi_get_eckv()
389 ret = -EINVAL; in iwl_acpi_get_eckv()
393 *extl_clk = wifi_pkg->package.elements[1].integer.value; in iwl_acpi_get_eckv()
409 profile->enabled = enabled; in iwl_sar_set_profile()
414 return -EINVAL; in iwl_sar_set_profile()
416 profile->table[i] = table[i].integer.value; in iwl_sar_set_profile()
434 return -EPERM; in iwl_sar_fill_table()
438 return -EINVAL; in iwl_sar_fill_table()
441 prof = &fwrt->sar_profiles[profs[i] - 1]; in iwl_sar_fill_table()
444 if (!prof->enabled) { in iwl_sar_fill_table()
462 cpu_to_le16(prof->table[idx]); in iwl_sar_fill_table()
464 j, prof->table[idx]); in iwl_sar_fill_table()
495 data = iwl_acpi_get_object(fwrt->dev, ACPI_WRDS_METHOD); in iwl_sar_get_wrds_table()
499 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data, in iwl_sar_get_wrds_table()
506 if (wifi_pkg->package.elements[1].type != ACPI_TYPE_INTEGER) { in iwl_sar_get_wrds_table()
507 ret = -EINVAL; in iwl_sar_get_wrds_table()
511 enabled = !!(wifi_pkg->package.elements[1].integer.value); in iwl_sar_get_wrds_table()
514 table = &wifi_pkg->package.elements[2]; in iwl_sar_get_wrds_table()
519 ret = iwl_sar_set_profile(table, &fwrt->sar_profiles[0], enabled); in iwl_sar_get_wrds_table()
533 data = iwl_acpi_get_object(fwrt->dev, ACPI_EWRD_METHOD); in iwl_sar_get_ewrd_table()
537 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data, in iwl_sar_get_ewrd_table()
544 if (wifi_pkg->package.elements[1].type != ACPI_TYPE_INTEGER || in iwl_sar_get_ewrd_table()
545 wifi_pkg->package.elements[2].type != ACPI_TYPE_INTEGER) { in iwl_sar_get_ewrd_table()
546 ret = -EINVAL; in iwl_sar_get_ewrd_table()
550 enabled = !!(wifi_pkg->package.elements[1].integer.value); in iwl_sar_get_ewrd_table()
551 n_profiles = wifi_pkg->package.elements[2].integer.value; in iwl_sar_get_ewrd_table()
556 * ACPI_SAR_PROFILES_NUM - 1. in iwl_sar_get_ewrd_table()
559 ret = -EINVAL; in iwl_sar_get_ewrd_table()
568 * save them in sar_profiles[1-3] (because we don't in iwl_sar_get_ewrd_table()
571 ret = iwl_sar_set_profile(&wifi_pkg->package.elements[pos], in iwl_sar_get_ewrd_table()
572 &fwrt->sar_profiles[i + 1], in iwl_sar_get_ewrd_table()
593 data = iwl_acpi_get_object(fwrt->dev, ACPI_WGDS_METHOD); in iwl_sar_get_wgds_table()
597 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data, in iwl_sar_get_wgds_table()
604 fwrt->geo_rev = tbl_rev; in iwl_sar_get_wgds_table()
607 union acpi_object *entry; in iwl_sar_get_wgds_table() local
609 entry = &wifi_pkg->package.elements[idx++]; in iwl_sar_get_wgds_table()
610 if (entry->type != ACPI_TYPE_INTEGER || in iwl_sar_get_wgds_table()
611 entry->integer.value > U8_MAX) { in iwl_sar_get_wgds_table()
612 ret = -EINVAL; in iwl_sar_get_wgds_table()
616 fwrt->geo_profiles[i].values[j] = entry->integer.value; in iwl_sar_get_wgds_table()
639 return IWL_UCODE_SERIAL(fwrt->fw->ucode_ver) >= 38 || in iwl_sar_geo_support()
640 IWL_UCODE_SERIAL(fwrt->fw->ucode_ver) == 17 || in iwl_sar_geo_support()
641 (IWL_UCODE_SERIAL(fwrt->fw->ucode_ver) == 29 && in iwl_sar_geo_support()
642 ((fwrt->trans->hw_rev & CSR_HW_REV_TYPE_MSK) == in iwl_sar_geo_support()
653 return -EOPNOTSUPP; in iwl_sar_geo_init()
661 return -ENOENT; in iwl_sar_geo_init()
671 ARRAY_SIZE(fwrt->geo_profiles[0].values)) in iwl_sar_geo_init()
679 value = &fwrt->geo_profiles[i].values[j * in iwl_sar_geo_init()
681 chain->max_tx_power = cpu_to_le16(value[0]); in iwl_sar_geo_init()
682 chain->chain_a = value[1]; in iwl_sar_geo_init()
683 chain->chain_b = value[2]; in iwl_sar_geo_init()