static void intel_dsm_platform_mux_info(void) { int i; union acpi_object *pkg, *connector_count; pkg = acpi_evaluate_dsm_typed(intel_dsm_priv.dhandle, intel_dsm_guid, INTEL_DSM_REVISION_ID, INTEL_DSM_FN_PLATFORM_MUX_INFO, NULL, ACPI_TYPE_PACKAGE); if (!pkg) { DRM_DEBUG_DRIVER("failed to evaluate _DSM\n"); return; } connector_count = &pkg->package.elements[0]; DRM_DEBUG_DRIVER("MUX info connectors: %lld\n", (unsigned long long)connector_count->integer.value); for (i = 1; i < pkg->package.count; i++) { union acpi_object *obj = &pkg->package.elements[i]; union acpi_object *connector_id = &obj->package.elements[0]; union acpi_object *info = &obj->package.elements[1]; DRM_DEBUG_DRIVER("Connector id: 0x%016llx\n", (unsigned long long)connector_id->integer.value); DRM_DEBUG_DRIVER(" port id: %s\n", intel_dsm_port_name(info->buffer.pointer[0])); DRM_DEBUG_DRIVER(" display mux info: %s\n", intel_dsm_mux_type(info->buffer.pointer[1])); DRM_DEBUG_DRIVER(" aux/dc mux info: %s\n", intel_dsm_mux_type(info->buffer.pointer[2])); DRM_DEBUG_DRIVER(" hpd mux info: %s\n", intel_dsm_mux_type(info->buffer.pointer[3])); } ACPI_FREE(pkg); }
static inline union acpi_object * tpm_eval_dsm(acpi_handle ppi_handle, int func, acpi_object_type type, union acpi_object *argv4) { BUG_ON(!ppi_handle); return acpi_evaluate_dsm_typed(ppi_handle, tpm_ppi_uuid, TPM_PPI_REVISION_ID, func, argv4, type); }
static void intel_hid_init_dsm(acpi_handle handle) { union acpi_object *obj; guid_parse(HID_EVENT_FILTER_UUID, &intel_dsm_guid); obj = acpi_evaluate_dsm_typed(handle, &intel_dsm_guid, 1, 0, NULL, ACPI_TYPE_BUFFER); if (obj) { intel_hid_dsm_fn_mask = *obj->buffer.pointer; ACPI_FREE(obj); } acpi_handle_debug(handle, "intel_hid_dsm_fn_mask = %llx\n", intel_hid_dsm_fn_mask); }
void tpm_add_ppi(struct tpm_chip *chip) { union acpi_object *obj; if (!chip->acpi_dev_handle) return; if (!acpi_check_dsm(chip->acpi_dev_handle, tpm_ppi_uuid, TPM_PPI_REVISION_ID, 1 << TPM_PPI_FN_VERSION)) return; /* Cache PPI version string. */ obj = acpi_evaluate_dsm_typed(chip->acpi_dev_handle, tpm_ppi_uuid, TPM_PPI_REVISION_ID, TPM_PPI_FN_VERSION, NULL, ACPI_TYPE_STRING); if (obj) { strlcpy(chip->ppi_version, obj->string.pointer, sizeof(chip->ppi_version)); ACPI_FREE(obj); } chip->groups[chip->groups_cnt++] = &ppi_attr_grp; }
static bool intel_hid_evaluate_method(acpi_handle handle, enum intel_hid_dsm_fn_codes fn_index, unsigned long long *result) { union acpi_object *obj; acpi_status status; char *method_name; if (fn_index <= INTEL_HID_DSM_FN_INVALID || fn_index >= INTEL_HID_DSM_FN_MAX) return false; method_name = (char *)intel_hid_dsm_fn_to_method[fn_index]; if (!(intel_hid_dsm_fn_mask & fn_index)) goto skip_dsm_eval; obj = acpi_evaluate_dsm_typed(handle, &intel_dsm_guid, 1, fn_index, NULL, ACPI_TYPE_INTEGER); if (obj) { *result = obj->integer.value; acpi_handle_debug(handle, "Eval DSM Fn code: %d[%s] results: 0x%llx\n", fn_index, method_name, *result); ACPI_FREE(obj); return true; } skip_dsm_eval: status = acpi_evaluate_integer(handle, method_name, NULL, result); if (ACPI_SUCCESS(status)) return true; return false; }