Lines Matching +full:sub +full:- +full:mailbox

9  * distribute, sub license, and/or sell copies of the Software, and to
20 * NON-INFRINGEMENT. IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE
74 /* OpRegion mailbox #1: public ACPI methods */
84 u32 aslp; /* ASL sleep time-out */
98 /* OpRegion mailbox #2: SWSCI */
102 u32 dslp; /* driver sleep time-out */
106 /* OpRegion mailbox #3: ASLE */
133 /* OpRegion mailbox #5: ASLE ext */
211 #define SWSCI_FUNCTION_CODE(main, sub) \ argument
213 (sub) << SWSCI_SCIC_SUB_FUNCTION_SHIFT)
249 struct opregion_swsci *swsci = dev_priv->opregion.swsci; in swsci()
250 struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev); in swsci()
256 return -ENODEV; in swsci()
265 if ((dev_priv->opregion.swsci_sbcb_sub_functions & in swsci()
267 return -EINVAL; in swsci()
269 if ((dev_priv->opregion.swsci_gbda_sub_functions & in swsci()
271 return -EINVAL; in swsci()
275 dslp = swsci->dslp; in swsci()
288 scic = swsci->scic; in swsci()
290 drm_dbg(&dev_priv->drm, "SWSCI request already in progress\n"); in swsci()
291 return -EBUSY; in swsci()
296 swsci->parm = parm; in swsci()
297 swsci->scic = scic; in swsci()
312 #define C (((scic = swsci->scic) & SWSCI_SCIC_INDICATOR) == 0) in swsci()
314 drm_dbg(&dev_priv->drm, "SWSCI request timed out\n"); in swsci()
315 return -ETIMEDOUT; in swsci()
323 drm_dbg(&dev_priv->drm, "SWSCI request error %u\n", scic); in swsci()
324 return -EIO; in swsci()
328 *parm_out = swsci->parm; in swsci()
343 struct drm_i915_private *dev_priv = to_i915(intel_encoder->base.dev); in intel_opregion_notify_encoder()
352 if (intel_encoder->type == INTEL_OUTPUT_DSI) in intel_opregion_notify_encoder()
355 port = intel_encoder->port; in intel_opregion_notify_encoder()
367 switch (intel_encoder->type) { in intel_opregion_notify_encoder()
382 drm_WARN_ONCE(&dev_priv->drm, 1, in intel_opregion_notify_encoder()
384 intel_encoder->type); in intel_opregion_notify_encoder()
385 return -EINVAL; in intel_opregion_notify_encoder()
418 return -EINVAL; in intel_opregion_notify_adapter()
425 struct opregion_asle *asle = dev_priv->opregion.asle; in asle_set_backlight()
426 struct drm_device *dev = &dev_priv->drm; in asle_set_backlight()
428 drm_dbg(&dev_priv->drm, "bclp = 0x%08x\n", bclp); in asle_set_backlight()
431 drm_dbg_kms(&dev_priv->drm, in asle_set_backlight()
443 drm_modeset_lock(&dev->mode_config.connection_mutex, NULL); in asle_set_backlight()
449 drm_dbg_kms(&dev_priv->drm, "updating opregion backlight %d/255\n", in asle_set_backlight()
453 intel_panel_set_backlight_acpi(connector->base.state, bclp, 255); in asle_set_backlight()
455 asle->cblv = DIV_ROUND_UP(bclp * 100, 255) | ASLE_CBLV_VALID; in asle_set_backlight()
457 drm_modeset_unlock(&dev->mode_config.connection_mutex); in asle_set_backlight()
466 range, 0xffff indicates above sensor range. 1-0xfffe are valid */ in asle_set_als_illum()
467 drm_dbg(&dev_priv->drm, "Illum is not supported\n"); in asle_set_als_illum()
473 drm_dbg(&dev_priv->drm, "PWM freq is not supported\n"); in asle_set_pwm_freq()
481 drm_dbg(&dev_priv->drm, "Pfit is not supported\n"); in asle_set_pfit()
487 drm_dbg(&dev_priv->drm, "SROT is not supported\n"); in asle_set_supported_rotation_angles()
494 drm_dbg(&dev_priv->drm, in asle_set_button_array()
497 drm_dbg(&dev_priv->drm, in asle_set_button_array()
500 drm_dbg(&dev_priv->drm, in asle_set_button_array()
503 drm_dbg(&dev_priv->drm, in asle_set_button_array()
506 drm_dbg(&dev_priv->drm, in asle_set_button_array()
509 drm_dbg(&dev_priv->drm, in asle_set_button_array()
518 drm_dbg(&dev_priv->drm, in asle_set_convertible()
521 drm_dbg(&dev_priv->drm, in asle_set_convertible()
530 drm_dbg(&dev_priv->drm, "Docking is not supported (docked)\n"); in asle_set_docking()
532 drm_dbg(&dev_priv->drm, in asle_set_docking()
540 drm_dbg(&dev_priv->drm, "ISCT is not supported\n"); in asle_isct_state()
550 struct opregion_asle *asle = dev_priv->opregion.asle; in asle_work()
557 aslc_req = asle->aslc; in asle_work()
560 drm_dbg(&dev_priv->drm, in asle_work()
566 aslc_stat |= asle_set_als_illum(dev_priv, asle->alsi); in asle_work()
569 aslc_stat |= asle_set_backlight(dev_priv, asle->bclp); in asle_work()
572 aslc_stat |= asle_set_pfit(dev_priv, asle->pfit); in asle_work()
575 aslc_stat |= asle_set_pwm_freq(dev_priv, asle->pfmb); in asle_work()
579 asle->srot); in asle_work()
582 aslc_stat |= asle_set_button_array(dev_priv, asle->iuer); in asle_work()
585 aslc_stat |= asle_set_convertible(dev_priv, asle->iuer); in asle_work()
588 aslc_stat |= asle_set_docking(dev_priv, asle->iuer); in asle_work()
593 asle->aslc = aslc_stat; in asle_work()
598 if (dev_priv->opregion.asle) in intel_opregion_asle_intr()
599 schedule_work(&dev_priv->opregion.asle_work); in intel_opregion_asle_intr()
620 if (strcmp(event->device_class, ACPI_VIDEO_CLASS) != 0) in intel_opregion_video_event()
623 acpi = opregion->acpi; in intel_opregion_video_event()
625 if (event->type == 0x80 && ((acpi->cevt & 1) == 0)) in intel_opregion_video_event()
628 acpi->csts = 0; in intel_opregion_video_event()
641 if (i < ARRAY_SIZE(opregion->acpi->didl)) { in set_did()
642 opregion->acpi->didl[i] = val; in set_did()
644 i -= ARRAY_SIZE(opregion->acpi->didl); in set_did()
646 if (WARN_ON(i >= ARRAY_SIZE(opregion->acpi->did2))) in set_did()
649 opregion->acpi->did2[i] = val; in set_did()
655 struct intel_opregion *opregion = &dev_priv->opregion; in intel_didl_outputs()
667 max_outputs = ARRAY_SIZE(opregion->acpi->didl) + in intel_didl_outputs()
668 ARRAY_SIZE(opregion->acpi->did2); in intel_didl_outputs()
672 drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter); in intel_didl_outputs()
675 set_did(opregion, i, connector->acpi_device_id); in intel_didl_outputs()
680 drm_dbg_kms(&dev_priv->drm, "%d outputs detected\n", i); in intel_didl_outputs()
683 drm_err(&dev_priv->drm, in intel_didl_outputs()
694 struct intel_opregion *opregion = &dev_priv->opregion; in intel_setup_cadls()
709 drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter); in intel_setup_cadls()
711 if (i >= ARRAY_SIZE(opregion->acpi->cadl)) in intel_setup_cadls()
713 opregion->acpi->cadl[i++] = connector->acpi_device_id; in intel_setup_cadls()
718 if (i < ARRAY_SIZE(opregion->acpi->cadl)) in intel_setup_cadls()
719 opregion->acpi->cadl[i] = 0; in intel_setup_cadls()
724 struct intel_opregion *opregion = &dev_priv->opregion; in swsci_setup()
728 /* Sub-function code 0 is okay, let's allow them. */ in swsci_setup()
729 opregion->swsci_gbda_sub_functions = 1; in swsci_setup()
730 opregion->swsci_sbcb_sub_functions = 1; in swsci_setup()
734 /* make the bits match the sub-function codes */ in swsci_setup()
736 opregion->swsci_gbda_sub_functions |= tmp; in swsci_setup()
745 /* here, the bits already match sub-function codes */ in swsci_setup()
746 opregion->swsci_sbcb_sub_functions |= tmp; in swsci_setup()
756 /* make the bits match the sub-function codes */ in swsci_setup()
763 u32 req = opregion->swsci_sbcb_sub_functions; in swsci_setup()
765 drm_dbg(&dev_priv->drm, in swsci_setup()
769 /* opregion->swsci_sbcb_sub_functions &= tmp; */ in swsci_setup()
771 opregion->swsci_sbcb_sub_functions |= tmp; in swsci_setup()
775 drm_dbg(&dev_priv->drm, in swsci_setup()
777 opregion->swsci_gbda_sub_functions, in swsci_setup()
778 opregion->swsci_sbcb_sub_functions); in swsci_setup()
784 "VBIOS ROM for %s\n", id->ident); in intel_no_opregion_vbt_callback()
802 struct intel_opregion *opregion = &dev_priv->opregion; in intel_load_vbt_firmware()
804 const char *name = dev_priv->params.vbt_firmware; in intel_load_vbt_firmware()
808 return -ENOENT; in intel_load_vbt_firmware()
810 ret = request_firmware(&fw, name, dev_priv->drm.dev); in intel_load_vbt_firmware()
812 drm_err(&dev_priv->drm, in intel_load_vbt_firmware()
818 if (intel_bios_is_valid_vbt(fw->data, fw->size)) { in intel_load_vbt_firmware()
819 opregion->vbt_firmware = kmemdup(fw->data, fw->size, GFP_KERNEL); in intel_load_vbt_firmware()
820 if (opregion->vbt_firmware) { in intel_load_vbt_firmware()
821 drm_dbg_kms(&dev_priv->drm, in intel_load_vbt_firmware()
823 opregion->vbt = opregion->vbt_firmware; in intel_load_vbt_firmware()
824 opregion->vbt_size = fw->size; in intel_load_vbt_firmware()
827 ret = -ENOMEM; in intel_load_vbt_firmware()
830 drm_dbg_kms(&dev_priv->drm, "Invalid VBT firmware \"%s\"\n", in intel_load_vbt_firmware()
832 ret = -EINVAL; in intel_load_vbt_firmware()
842 struct intel_opregion *opregion = &dev_priv->opregion; in intel_opregion_setup()
843 struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev); in intel_opregion_setup()
858 drm_dbg(&dev_priv->drm, "graphic opregion physical addr: 0x%x\n", in intel_opregion_setup()
861 drm_dbg(&dev_priv->drm, "ACPI OpRegion not supported!\n"); in intel_opregion_setup()
862 return -ENOTSUPP; in intel_opregion_setup()
865 INIT_WORK(&opregion->asle_work, asle_work); in intel_opregion_setup()
869 return -ENOMEM; in intel_opregion_setup()
874 drm_dbg(&dev_priv->drm, "opregion signature mismatch\n"); in intel_opregion_setup()
875 err = -EINVAL; in intel_opregion_setup()
878 opregion->header = base; in intel_opregion_setup()
879 opregion->lid_state = base + ACPI_CLID; in intel_opregion_setup()
881 drm_dbg(&dev_priv->drm, "ACPI OpRegion version %u.%u.%u\n", in intel_opregion_setup()
882 opregion->header->over.major, in intel_opregion_setup()
883 opregion->header->over.minor, in intel_opregion_setup()
884 opregion->header->over.revision); in intel_opregion_setup()
886 mboxes = opregion->header->mboxes; in intel_opregion_setup()
888 drm_dbg(&dev_priv->drm, "Public ACPI methods supported\n"); in intel_opregion_setup()
889 opregion->acpi = base + OPREGION_ACPI_OFFSET; in intel_opregion_setup()
896 opregion->acpi->chpd = 1; in intel_opregion_setup()
900 drm_dbg(&dev_priv->drm, "SWSCI supported\n"); in intel_opregion_setup()
901 opregion->swsci = base + OPREGION_SWSCI_OFFSET; in intel_opregion_setup()
906 drm_dbg(&dev_priv->drm, "ASLE supported\n"); in intel_opregion_setup()
907 opregion->asle = base + OPREGION_ASLE_OFFSET; in intel_opregion_setup()
909 opregion->asle->ardy = ASLE_ARDY_NOT_READY; in intel_opregion_setup()
913 drm_dbg(&dev_priv->drm, "ASLE extension supported\n"); in intel_opregion_setup()
921 if (opregion->header->over.major >= 2 && opregion->asle && in intel_opregion_setup()
922 opregion->asle->rvda && opregion->asle->rvds) { in intel_opregion_setup()
923 resource_size_t rvda = opregion->asle->rvda; in intel_opregion_setup()
931 if (opregion->header->over.major > 2 || in intel_opregion_setup()
932 opregion->header->over.minor >= 1) { in intel_opregion_setup()
933 drm_WARN_ON(&dev_priv->drm, rvda < OPREGION_SIZE); in intel_opregion_setup()
938 opregion->rvda = memremap(rvda, opregion->asle->rvds, in intel_opregion_setup()
941 vbt = opregion->rvda; in intel_opregion_setup()
942 vbt_size = opregion->asle->rvds; in intel_opregion_setup()
944 drm_dbg_kms(&dev_priv->drm, in intel_opregion_setup()
946 opregion->vbt = vbt; in intel_opregion_setup()
947 opregion->vbt_size = vbt_size; in intel_opregion_setup()
950 drm_dbg_kms(&dev_priv->drm, in intel_opregion_setup()
952 memunmap(opregion->rvda); in intel_opregion_setup()
953 opregion->rvda = NULL; in intel_opregion_setup()
959 * The VBT specification says that if the ASLE ext mailbox is not used in intel_opregion_setup()
967 vbt_size -= OPREGION_VBT_OFFSET; in intel_opregion_setup()
969 drm_dbg_kms(&dev_priv->drm, in intel_opregion_setup()
970 "Found valid VBT in ACPI OpRegion (Mailbox #4)\n"); in intel_opregion_setup()
971 opregion->vbt = vbt; in intel_opregion_setup()
972 opregion->vbt_size = vbt_size; in intel_opregion_setup()
974 drm_dbg_kms(&dev_priv->drm, in intel_opregion_setup()
975 "Invalid VBT in ACPI OpRegion (Mailbox #4)\n"); in intel_opregion_setup()
988 DRM_INFO("Using panel type from OpRegion on %s\n", id->ident); in intel_use_opregion_panel_type_callback()
1015 drm_dbg_kms(&dev_priv->drm, in intel_opregion_get_panel_type()
1017 return -EINVAL; in intel_opregion_get_panel_type()
1022 drm_dbg_kms(&dev_priv->drm, "No panel type in OpRegion\n"); in intel_opregion_get_panel_type()
1023 return -ENODEV; in intel_opregion_get_panel_type()
1032 drm_dbg_kms(&dev_priv->drm, in intel_opregion_get_panel_type()
1033 "Ignoring OpRegion panel type (%d)\n", ret - 1); in intel_opregion_get_panel_type()
1034 return -ENODEV; in intel_opregion_get_panel_type()
1037 return ret - 1; in intel_opregion_get_panel_type()
1042 struct intel_opregion *opregion = &i915->opregion; in intel_opregion_register()
1044 if (!opregion->header) in intel_opregion_register()
1047 if (opregion->acpi) { in intel_opregion_register()
1048 opregion->acpi_notifier.notifier_call = in intel_opregion_register()
1050 register_acpi_notifier(&opregion->acpi_notifier); in intel_opregion_register()
1058 struct intel_opregion *opregion = &i915->opregion; in intel_opregion_resume()
1060 if (!opregion->header) in intel_opregion_resume()
1063 if (opregion->acpi) { in intel_opregion_resume()
1072 opregion->acpi->csts = 0; in intel_opregion_resume()
1073 opregion->acpi->drdy = 1; in intel_opregion_resume()
1076 if (opregion->asle) { in intel_opregion_resume()
1077 opregion->asle->tche = ASLE_TCHE_BLC_EN; in intel_opregion_resume()
1078 opregion->asle->ardy = ASLE_ARDY_READY; in intel_opregion_resume()
1089 struct intel_opregion *opregion = &i915->opregion; in intel_opregion_suspend()
1091 if (!opregion->header) in intel_opregion_suspend()
1096 if (opregion->asle) in intel_opregion_suspend()
1097 opregion->asle->ardy = ASLE_ARDY_NOT_READY; in intel_opregion_suspend()
1099 cancel_work_sync(&i915->opregion.asle_work); in intel_opregion_suspend()
1101 if (opregion->acpi) in intel_opregion_suspend()
1102 opregion->acpi->drdy = 0; in intel_opregion_suspend()
1107 struct intel_opregion *opregion = &i915->opregion; in intel_opregion_unregister()
1111 if (!opregion->header) in intel_opregion_unregister()
1114 if (opregion->acpi_notifier.notifier_call) { in intel_opregion_unregister()
1115 unregister_acpi_notifier(&opregion->acpi_notifier); in intel_opregion_unregister()
1116 opregion->acpi_notifier.notifier_call = NULL; in intel_opregion_unregister()
1120 memunmap(opregion->header); in intel_opregion_unregister()
1121 if (opregion->rvda) { in intel_opregion_unregister()
1122 memunmap(opregion->rvda); in intel_opregion_unregister()
1123 opregion->rvda = NULL; in intel_opregion_unregister()
1125 if (opregion->vbt_firmware) { in intel_opregion_unregister()
1126 kfree(opregion->vbt_firmware); in intel_opregion_unregister()
1127 opregion->vbt_firmware = NULL; in intel_opregion_unregister()
1129 opregion->header = NULL; in intel_opregion_unregister()
1130 opregion->acpi = NULL; in intel_opregion_unregister()
1131 opregion->swsci = NULL; in intel_opregion_unregister()
1132 opregion->asle = NULL; in intel_opregion_unregister()
1133 opregion->vbt = NULL; in intel_opregion_unregister()
1134 opregion->lid_state = NULL; in intel_opregion_unregister()