Lines Matching +full:out +full:- +full:functions
19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
67 struct amdgpu_atif_functions functions; member
86 struct amdgpu_atcs_functions functions; member
97 * amdgpu_atif_call - call an ATIF method
123 atif_arg_elements[1].buffer.length = params->length; in amdgpu_atif_call()
124 atif_arg_elements[1].buffer.pointer = params->pointer; in amdgpu_atif_call()
131 status = acpi_evaluate_object(atif->handle, NULL, &atif_arg, in amdgpu_atif_call()
146 * amdgpu_atif_parse_notification - parse supported notifications
157 n->thermal_state = mask & ATIF_THERMAL_STATE_CHANGE_REQUEST_SUPPORTED; in amdgpu_atif_parse_notification()
158 n->forced_power_state = mask & ATIF_FORCED_POWER_STATE_CHANGE_REQUEST_SUPPORTED; in amdgpu_atif_parse_notification()
159 n->system_power_state = mask & ATIF_SYSTEM_POWER_SOURCE_CHANGE_REQUEST_SUPPORTED; in amdgpu_atif_parse_notification()
160 n->brightness_change = mask & ATIF_PANEL_BRIGHTNESS_CHANGE_REQUEST_SUPPORTED; in amdgpu_atif_parse_notification()
161 n->dgpu_display_event = mask & ATIF_DGPU_DISPLAY_EVENT_SUPPORTED; in amdgpu_atif_parse_notification()
162 n->gpu_package_power_limit = mask & ATIF_GPU_PACKAGE_POWER_LIMIT_REQUEST_SUPPORTED; in amdgpu_atif_parse_notification()
166 * amdgpu_atif_parse_functions - parse supported functions
168 * @f: supported functions struct
169 * @mask: supported functions mask from ATIF
171 * Use the supported functions mask from ATIF function
172 * ATIF_FUNCTION_VERIFY_INTERFACE to determine what functions
177 f->system_params = mask & ATIF_GET_SYSTEM_PARAMETERS_SUPPORTED; in amdgpu_atif_parse_functions()
178 f->sbios_requests = mask & ATIF_GET_SYSTEM_BIOS_REQUESTS_SUPPORTED; in amdgpu_atif_parse_functions()
179 f->temperature_change = mask & ATIF_TEMPERATURE_CHANGE_NOTIFICATION_SUPPORTED; in amdgpu_atif_parse_functions()
180 f->query_backlight_transfer_characteristics = in amdgpu_atif_parse_functions()
182 f->ready_to_undock = mask & ATIF_READY_TO_UNDOCK_NOTIFICATION_SUPPORTED; in amdgpu_atif_parse_functions()
183 f->external_gpu_information = mask & ATIF_GET_EXTERNAL_GPU_INFORMATION_SUPPORTED; in amdgpu_atif_parse_functions()
187 * amdgpu_atif_verify_interface - verify ATIF
205 return -EIO; in amdgpu_atif_verify_interface()
209 size = *(u16 *) info->buffer.pointer; in amdgpu_atif_verify_interface()
212 err = -EINVAL; in amdgpu_atif_verify_interface()
213 goto out; in amdgpu_atif_verify_interface()
217 memcpy(&output, info->buffer.pointer, size); in amdgpu_atif_verify_interface()
222 amdgpu_atif_parse_notification(&atif->notifications, output.notification_mask); in amdgpu_atif_verify_interface()
223 amdgpu_atif_parse_functions(&atif->functions, output.function_bits); in amdgpu_atif_verify_interface()
225 out: in amdgpu_atif_verify_interface()
231 * amdgpu_atif_get_notification_params - determine notify configuration
244 struct amdgpu_atif_notification_cfg *n = &atif->notification_cfg; in amdgpu_atif_get_notification_params()
252 err = -EIO; in amdgpu_atif_get_notification_params()
253 goto out; in amdgpu_atif_get_notification_params()
256 size = *(u16 *) info->buffer.pointer; in amdgpu_atif_get_notification_params()
258 err = -EINVAL; in amdgpu_atif_get_notification_params()
259 goto out; in amdgpu_atif_get_notification_params()
264 memcpy(¶ms, info->buffer.pointer, size); in amdgpu_atif_get_notification_params()
271 n->enabled = false; in amdgpu_atif_get_notification_params()
272 n->command_code = 0; in amdgpu_atif_get_notification_params()
274 n->enabled = true; in amdgpu_atif_get_notification_params()
275 n->command_code = 0x81; in amdgpu_atif_get_notification_params()
278 err = -EINVAL; in amdgpu_atif_get_notification_params()
279 goto out; in amdgpu_atif_get_notification_params()
281 n->enabled = true; in amdgpu_atif_get_notification_params()
282 n->command_code = params.command_code; in amdgpu_atif_get_notification_params()
285 out: in amdgpu_atif_get_notification_params()
287 (n->enabled ? "enabled" : "disabled"), in amdgpu_atif_get_notification_params()
288 n->command_code); in amdgpu_atif_get_notification_params()
294 * amdgpu_atif_query_backlight_caps - get min and max backlight input signal
303 * The input signals are in range 0-255
328 err = -EIO; in amdgpu_atif_query_backlight_caps()
329 goto out; in amdgpu_atif_query_backlight_caps()
332 size = *(u16 *) info->buffer.pointer; in amdgpu_atif_query_backlight_caps()
334 err = -EINVAL; in amdgpu_atif_query_backlight_caps()
335 goto out; in amdgpu_atif_query_backlight_caps()
340 memcpy(&characteristics, info->buffer.pointer, size); in amdgpu_atif_query_backlight_caps()
342 atif->backlight_caps.caps_valid = true; in amdgpu_atif_query_backlight_caps()
343 atif->backlight_caps.min_input_signal = in amdgpu_atif_query_backlight_caps()
345 atif->backlight_caps.max_input_signal = in amdgpu_atif_query_backlight_caps()
347 out: in amdgpu_atif_query_backlight_caps()
353 * amdgpu_atif_get_sbios_requests - get requested sbios event
373 return -EIO; in amdgpu_atif_get_sbios_requests()
375 size = *(u16 *)info->buffer.pointer; in amdgpu_atif_get_sbios_requests()
377 count = -EINVAL; in amdgpu_atif_get_sbios_requests()
378 goto out; in amdgpu_atif_get_sbios_requests()
383 memcpy(req, info->buffer.pointer, size); in amdgpu_atif_get_sbios_requests()
384 DRM_DEBUG_DRIVER("SBIOS pending requests: %#x\n", req->pending); in amdgpu_atif_get_sbios_requests()
386 count = hweight32(req->pending); in amdgpu_atif_get_sbios_requests()
388 out: in amdgpu_atif_get_sbios_requests()
394 * amdgpu_atif_handler - handle ATIF notify requests
412 event->device_class, event->type); in amdgpu_atif_handler()
414 if (strcmp(event->device_class, ACPI_VIDEO_CLASS) != 0) in amdgpu_atif_handler()
418 if (!atif->notification_cfg.enabled || in amdgpu_atif_handler()
419 event->type != atif->notification_cfg.command_code) { in amdgpu_atif_handler()
421 if (event->type == ACPI_VIDEO_NOTIFY_PROBE) in amdgpu_atif_handler()
427 if (atif->functions.sbios_requests) { in amdgpu_atif_handler()
440 if (atif->bd) { in amdgpu_atif_handler()
448 backlight_device_set_brightness(atif->bd, req.backlight_level); in amdgpu_atif_handler()
454 if (adev->flags & AMD_IS_PX) { in amdgpu_atif_handler()
455 pm_runtime_get_sync(adev_to_drm(adev)->dev); in amdgpu_atif_handler()
458 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_atif_handler()
459 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_atif_handler()
476 * amdgpu_atcs_call - call an ATCS method
502 atcs_arg_elements[1].buffer.length = params->length; in amdgpu_atcs_call()
503 atcs_arg_elements[1].buffer.pointer = params->pointer; in amdgpu_atcs_call()
510 status = acpi_evaluate_object(atcs->handle, NULL, &atcs_arg, &buffer); in amdgpu_atcs_call()
524 * amdgpu_atcs_parse_functions - parse supported functions
526 * @f: supported functions struct
527 * @mask: supported functions mask from ATCS
529 * Use the supported functions mask from ATCS function
530 * ATCS_FUNCTION_VERIFY_INTERFACE to determine what functions
535 f->get_ext_state = mask & ATCS_GET_EXTERNAL_STATE_SUPPORTED; in amdgpu_atcs_parse_functions()
536 f->pcie_perf_req = mask & ATCS_PCIE_PERFORMANCE_REQUEST_SUPPORTED; in amdgpu_atcs_parse_functions()
537 f->pcie_dev_rdy = mask & ATCS_PCIE_DEVICE_READY_NOTIFICATION_SUPPORTED; in amdgpu_atcs_parse_functions()
538 f->pcie_bus_width = mask & ATCS_SET_PCIE_BUS_WIDTH_SUPPORTED; in amdgpu_atcs_parse_functions()
539 f->power_shift_control = mask & ATCS_SET_POWER_SHIFT_CONTROL_SUPPORTED; in amdgpu_atcs_parse_functions()
543 * amdgpu_atcs_verify_interface - verify ATCS
561 return -EIO; in amdgpu_atcs_verify_interface()
565 size = *(u16 *) info->buffer.pointer; in amdgpu_atcs_verify_interface()
568 err = -EINVAL; in amdgpu_atcs_verify_interface()
569 goto out; in amdgpu_atcs_verify_interface()
573 memcpy(&output, info->buffer.pointer, size); in amdgpu_atcs_verify_interface()
578 amdgpu_atcs_parse_functions(&atcs->functions, output.function_bits); in amdgpu_atcs_verify_interface()
580 out: in amdgpu_atcs_verify_interface()
598 if (atcs->functions.pcie_perf_req && atcs->functions.pcie_dev_rdy) in amdgpu_acpi_is_pcie_performance_request_supported()
613 return amdgpu_acpi_priv.atcs.functions.power_shift_control; in amdgpu_acpi_is_power_shift_control_supported()
630 if (!atcs->functions.pcie_dev_rdy) in amdgpu_acpi_pcie_notify_device_ready()
631 return -EINVAL; in amdgpu_acpi_pcie_notify_device_ready()
635 return -EIO; in amdgpu_acpi_pcie_notify_device_ready()
665 return -EINVAL; in amdgpu_acpi_pcie_performance_request()
667 if (!atcs->functions.pcie_perf_req) in amdgpu_acpi_pcie_performance_request()
668 return -EINVAL; in amdgpu_acpi_pcie_performance_request()
671 /* client id (bit 2-0: func num, 7-3: dev num, 15-8: bus num) */ in amdgpu_acpi_pcie_performance_request()
672 atcs_input.client_id = adev->pdev->devfn | (adev->pdev->bus->number << 8); in amdgpu_acpi_pcie_performance_request()
683 while (retry--) { in amdgpu_acpi_pcie_performance_request()
686 return -EIO; in amdgpu_acpi_pcie_performance_request()
690 size = *(u16 *) info->buffer.pointer; in amdgpu_acpi_pcie_performance_request()
694 return -EINVAL; in amdgpu_acpi_pcie_performance_request()
698 memcpy(&atcs_output, info->buffer.pointer, size); in amdgpu_acpi_pcie_performance_request()
705 return -EINVAL; in amdgpu_acpi_pcie_performance_request()
738 return -EINVAL; in amdgpu_acpi_power_shift_control()
741 /* dGPU id (bit 2-0: func num, 7-3: dev num, 15-8: bus num) */ in amdgpu_acpi_power_shift_control()
742 atcs_input.dgpu_id = adev->pdev->devfn | (adev->pdev->bus->number << 8); in amdgpu_acpi_power_shift_control()
752 return -EIO; in amdgpu_acpi_power_shift_control()
759 * amdgpu_acpi_smart_shift_update - update dGPU device state to SBIOS
801 return -EINVAL; in amdgpu_acpi_smart_shift_update()
808 * amdgpu_acpi_event - handle notify events
814 * Calls relevant amdgpu functions in response to various
825 if (strcmp(entry->device_class, ACPI_AC_CLASS) == 0) { in amdgpu_acpi_event()
840 * amdgpu_acpi_init - init driver acpi support
853 if (atif->notifications.brightness_change) { in amdgpu_acpi_init()
856 struct amdgpu_display_manager *dm = &adev->dm; in amdgpu_acpi_init()
857 if (dm->backlight_dev[0]) in amdgpu_acpi_init()
858 atif->bd = dm->backlight_dev[0]; in amdgpu_acpi_init()
864 list_for_each_entry(tmp, &adev_to_drm(adev)->mode_config.encoder_list, in amdgpu_acpi_init()
868 if ((enc->devices & (ATOM_DEVICE_LCD_SUPPORT)) && in amdgpu_acpi_init()
869 enc->enc_priv) { in amdgpu_acpi_init()
870 struct amdgpu_encoder_atom_dig *dig = enc->enc_priv; in amdgpu_acpi_init()
871 if (dig->bl_dev) { in amdgpu_acpi_init()
872 atif->bd = dig->bl_dev; in amdgpu_acpi_init()
880 adev->acpi_nb.notifier_call = amdgpu_acpi_event; in amdgpu_acpi_init()
881 register_acpi_notifier(&adev->acpi_nb); in amdgpu_acpi_init()
890 caps->caps_valid = atif->backlight_caps.caps_valid; in amdgpu_acpi_get_backlight_caps()
891 caps->min_input_signal = atif->backlight_caps.min_input_signal; in amdgpu_acpi_get_backlight_caps()
892 caps->max_input_signal = atif->backlight_caps.max_input_signal; in amdgpu_acpi_get_backlight_caps()
896 * amdgpu_acpi_fini - tear down driver acpi support
904 unregister_acpi_notifier(&adev->acpi_nb); in amdgpu_acpi_fini()
908 * amdgpu_atif_pci_probe_handle - look up the ATIF handle
923 dhandle = ACPI_HANDLE(&pdev->dev); in amdgpu_atif_pci_probe_handle()
943 * amdgpu_atcs_pci_probe_handle - look up the ATCS handle
958 dhandle = ACPI_HANDLE(&pdev->dev); in amdgpu_atcs_pci_probe_handle()
978 * amdgpu_acpi_detect - detect ACPI ATIF/ATCS methods
991 if (!atif->handle) in amdgpu_acpi_detect()
993 if (!atcs->handle) in amdgpu_acpi_detect()
998 if (!atif->handle) in amdgpu_acpi_detect()
1000 if (!atcs->handle) in amdgpu_acpi_detect()
1004 if (atif->functions.sbios_requests && !atif->functions.system_params) { in amdgpu_acpi_detect()
1009 atif->functions.system_params = true; in amdgpu_acpi_detect()
1012 if (atif->functions.system_params) { in amdgpu_acpi_detect()
1018 atif->notification_cfg.enabled = false; in amdgpu_acpi_detect()
1022 if (atif->functions.query_backlight_transfer_characteristics) { in amdgpu_acpi_detect()
1027 atif->backlight_caps.caps_valid = false; in amdgpu_acpi_detect()
1030 atif->backlight_caps.caps_valid = false; in amdgpu_acpi_detect()
1045 if (adev->flags & AMD_IS_APU) in amdgpu_acpi_is_s0ix_active()