Lines Matching +full:package +full:- +full:mode
1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
4 * Copyright (C) 2019-2025 Intel Corporation
7 #include "iwl-drv.h"
8 #include "iwl-debug.h"
43 return -ENOENT;
50 return -ENOENT;
64 return ERR_PTR(-ENOENT);
72 return ERR_PTR(-ENOENT);
94 return ERR_PTR(-ENOENT);
118 return -ENOENT;
121 if (obj->type == ACPI_TYPE_INTEGER) {
122 *value = obj->integer.value;
123 } else if (obj->type == ACPI_TYPE_BUFFER) {
127 ret = -EINVAL;
132 if (obj->buffer.length != expected_size)
135 obj->buffer.length);
138 memcpy(&le_value, obj->buffer.pointer,
139 min_t(size_t, expected_size, (size_t)obj->buffer.length));
144 obj->type);
145 ret = -EINVAL;
160 * according to Intel BIOS spec, and fills in the value in a 32-bit field.
161 * In case the expected size is smaller than 32-bit, padding will be added.
173 return -EINVAL;
177 /* Currently all ACPI DSMs are either 8-bit or 32-bit */
179 return -EOPNOTSUPP;
181 if (!fwrt->acpi_dsm_funcs_valid) {
182 ret = iwl_acpi_get_dsm_integer(fwrt->dev, ACPI_DSM_REV,
187 /* always indicate BIT(0) to avoid re-reading */
188 fwrt->acpi_dsm_funcs_valid = BIT(0);
194 /* always indicate BIT(0) to avoid re-reading */
195 fwrt->acpi_dsm_funcs_valid = tmp | BIT(0);
198 if (!(fwrt->acpi_dsm_funcs_valid & BIT(func))) {
201 return -ENODATA;
204 ret = iwl_acpi_get_dsm_integer(fwrt->dev, ACPI_DSM_REV, func,
229 * We need at least one entry in the wifi package that
234 return ERR_PTR(-EINVAL);
242 if (data->type != ACPI_TYPE_PACKAGE ||
243 data->package.count < 2 ||
244 data->package.elements[0].type != ACPI_TYPE_INTEGER) {
246 return ERR_PTR(-EINVAL);
249 *tbl_rev = data->package.elements[0].integer.value;
252 for (i = 1; i < data->package.count; i++) {
255 wifi_pkg = &data->package.elements[i];
257 /* skip entries that are not a package with the right size */
258 if (wifi_pkg->type != ACPI_TYPE_PACKAGE ||
259 wifi_pkg->package.count < min_data_size ||
260 wifi_pkg->package.count > max_data_size)
263 domain = &wifi_pkg->package.elements[0];
264 if (domain->type == ACPI_TYPE_INTEGER &&
265 domain->integer.value == ACPI_WIFI_DOMAIN)
269 return ERR_PTR(-ENOENT);
291 data = iwl_acpi_get_object(fwrt->dev, ACPI_WTAS_METHOD);
296 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data,
305 wifi_pkg->package.elements[1].type != ACPI_TYPE_INTEGER) {
306 ret = -EINVAL;
310 tas_selection = (u32)wifi_pkg->package.elements[1].integer.value;
315 tas_data->table_source = BIOS_SOURCE_ACPI;
316 tas_data->table_revision = tbl_rev;
317 tas_data->tas_selection = tas_selection;
323 if (wifi_pkg->package.elements[2].type != ACPI_TYPE_INTEGER ||
324 wifi_pkg->package.elements[2].integer.value >
327 wifi_pkg->package.elements[2].integer.value);
328 ret = -EINVAL;
332 block_list_size = wifi_pkg->package.elements[2].integer.value;
333 tas_data->block_list_size = block_list_size;
340 if (wifi_pkg->package.elements[3 + i].type !=
344 ret = -EINVAL;
348 country = wifi_pkg->package.elements[3 + i].integer.value;
349 tas_data->block_list_array[i] = country;
365 data = iwl_acpi_get_object(fwrt->dev, ACPI_WRDD_METHOD);
369 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data,
377 if (wifi_pkg->package.elements[1].type != ACPI_TYPE_INTEGER ||
379 ret = -EINVAL;
383 mcc_val = wifi_pkg->package.elements[1].integer.value;
385 ret = -EINVAL;
403 int tbl_rev, ret = -EINVAL;
406 data = iwl_acpi_get_object(fwrt->dev, ACPI_SPLC_METHOD);
410 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data,
413 wifi_pkg->package.elements[1].integer.value != ACPI_TYPE_INTEGER)
416 *dflt_pwr_limit = wifi_pkg->package.elements[1].integer.value;
429 data = iwl_acpi_get_object(fwrt->dev, ACPI_ECKV_METHOD);
433 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data,
441 if (wifi_pkg->package.elements[1].type != ACPI_TYPE_INTEGER ||
443 ret = -EINVAL;
447 *extl_clk = wifi_pkg->package.elements[1].integer.value;
467 } else if (table->type != ACPI_TYPE_INTEGER ||
468 table->integer.value > U8_MAX) {
469 return -EINVAL;
472 table->integer.value;
488 data = iwl_acpi_get_object(fwrt->dev, ACPI_WRDS_METHOD);
493 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data,
498 ret = -EINVAL;
509 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data,
514 ret = -EINVAL;
525 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data,
530 ret = -EINVAL;
544 if (wifi_pkg->package.elements[1].type != ACPI_TYPE_INTEGER) {
545 ret = -EINVAL;
551 flags = wifi_pkg->package.elements[1].integer.value;
552 fwrt->reduced_power_flags = flags >> IWL_REDUCE_POWER_FLAGS_POS;
555 table = &wifi_pkg->package.elements[2];
560 ret = iwl_acpi_parse_chains_table(table, fwrt->sar_profiles[0].chains,
563 fwrt->sar_profiles[0].enabled = true;
578 data = iwl_acpi_get_object(fwrt->dev, ACPI_EWRD_METHOD);
583 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data,
588 ret = -EINVAL;
598 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data,
603 ret = -EINVAL;
613 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data,
618 ret = -EINVAL;
631 if (wifi_pkg->package.elements[1].type != ACPI_TYPE_INTEGER ||
632 wifi_pkg->package.elements[2].type != ACPI_TYPE_INTEGER) {
633 ret = -EINVAL;
637 enabled = !!(wifi_pkg->package.elements[1].integer.value);
638 n_profiles = wifi_pkg->package.elements[2].integer.value;
643 * ACPI_SAR_PROFILES_NUM - 1.
646 ret = -EINVAL;
656 /* parse non-cdb chains for all profiles */
658 union acpi_object *table = &wifi_pkg->package.elements[pos];
661 * save them in sar_profiles[1-3] (because we don't
665 fwrt->sar_profiles[i + 1].chains,
675 /* non-cdb table revisions */
684 table = &wifi_pkg->package.elements[pos];
685 chains = &fwrt->sar_profiles[i + 1].chains[ACPI_SAR_NUM_CHAINS_REV0];
699 fwrt->sar_profiles[i + 1].enabled = enabled;
741 data = iwl_acpi_get_object(fwrt->dev, ACPI_WGDS_METHOD);
760 wifi_pkg = iwl_acpi_get_wifi_pkg_range(fwrt->dev, data,
774 entry = &wifi_pkg->package.elements[entry_idx];
776 if (entry->type != ACPI_TYPE_INTEGER ||
777 entry->integer.value > num_profiles ||
778 entry->integer.value <
780 ret = -EINVAL;
785 * Check to see if we received package count
788 if (wifi_pkg->package.count !=
790 ret = -EINVAL;
795 num_profiles = entry->integer.value;
804 ret = -ENOENT;
808 fwrt->geo_rev = tbl_rev;
819 fwrt->geo_profiles[i].bands[j].max =
820 fwrt->geo_profiles[i].bands[1].max;
822 entry = &wifi_pkg->package.elements[entry_idx];
824 if (entry->type != ACPI_TYPE_INTEGER ||
825 entry->integer.value > U8_MAX) {
826 ret = -EINVAL;
830 fwrt->geo_profiles[i].bands[j].max =
831 entry->integer.value;
837 fwrt->geo_profiles[i].bands[j].chains[k] =
838 fwrt->geo_profiles[i].bands[1].chains[k];
840 entry = &wifi_pkg->package.elements[entry_idx];
842 if (entry->type != ACPI_TYPE_INTEGER ||
843 entry->integer.value > U8_MAX) {
844 ret = -EINVAL;
848 fwrt->geo_profiles[i].bands[j].chains[k] =
849 entry->integer.value;
855 fwrt->geo_num_profiles = num_profiles;
856 fwrt->geo_enabled = true;
869 data = iwl_acpi_get_object(fwrt->dev, ACPI_PPAG_METHOD);
874 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data,
885 ret = -EINVAL;
891 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data,
896 ret = -EINVAL;
908 fwrt->ppag_bios_rev = tbl_rev;
909 flags = &wifi_pkg->package.elements[1];
911 if (flags->type != ACPI_TYPE_INTEGER) {
912 ret = -EINVAL;
916 fwrt->ppag_flags = iwl_bios_get_ppag_flags(flags->integer.value,
917 fwrt->ppag_bios_rev);
921 * first sub-band (j=0) corresponds to Low-Band (2.4GHz), and the
922 * following sub-bands to High-Band (5GHz).
928 ent = &wifi_pkg->package.elements[idx++];
929 if (ent->type != ACPI_TYPE_INTEGER) {
930 ret = -EINVAL;
934 fwrt->ppag_chains[i].subbands[j] = ent->integer.value;
938 fwrt->ppag_bios_source = BIOS_SOURCE_ACPI;
948 struct iwl_phy_specific_cfg *filters = &fwrt->phy_filters;
953 data = iwl_acpi_get_object(fwrt->dev, ACPI_WPFC_METHOD);
957 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data,
964 return -EINVAL;
966 BUILD_BUG_ON(ARRAY_SIZE(filters->filter_cfg_chains) !=
967 ACPI_WPFC_WIFI_DATA_SIZE - 1);
969 for (i = 0; i < ARRAY_SIZE(filters->filter_cfg_chains); i++) {
970 if (wifi_pkg->package.elements[i + 1].type != ACPI_TYPE_INTEGER)
971 return -EINVAL;
973 cpu_to_le32(wifi_pkg->package.elements[i + 1].integer.value);
987 data = iwl_acpi_get_object(fwrt->dev, ACPI_GLAI_METHOD);
991 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data,
1002 if (wifi_pkg->package.elements[1].type != ACPI_TYPE_INTEGER ||
1003 wifi_pkg->package.elements[1].integer.value > ACPI_GLAI_MAX_STATUS)
1006 fwrt->uefi_tables_lock_status =
1007 wifi_pkg->package.elements[1].integer.value;
1011 fwrt->uefi_tables_lock_status);
1020 int ret = -ENOENT;
1023 data = iwl_acpi_get_object(fwrt->dev, ACPI_WBEM_METHOD);
1027 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data,
1039 if (wifi_pkg->package.elements[1].type != ACPI_TYPE_INTEGER)
1042 *value = wifi_pkg->package.elements[1].integer.value &
1054 int ret = -ENOENT;
1057 data = iwl_acpi_get_object(fwrt->dev, ACPI_DSBR_METHOD);
1061 wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data,
1073 if (wifi_pkg->package.elements[1].type != ACPI_TYPE_INTEGER)
1076 *value = wifi_pkg->package.elements[1].integer.value;