From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH v2 3/3] drm/i915: Add support for integrated privacy screens Date: Wed, 20 Nov 2019 17:04:20 +0200 Message-ID: <87r222wpvv.fsf@intel.com> References: <20191023001206.15741-1-rajatja@google.com> <20191104194147.185642-1-rajatja@google.com> <20191104194147.185642-3-rajatja@google.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8BIT Return-path: In-Reply-To: <20191104194147.185642-3-rajatja@google.com> Sender: linux-kernel-owner@vger.kernel.org To: Maarten Lankhorst , Maxime Ripard , Sean Paul , David Airlie , Daniel Vetter , Joonas Lahtinen , Rodrigo Vivi , Ville =?utf-8?B?U3lyasOkbMOk?= , Chris Wilson , Imre Deak , =?utf-8?Q?Jos=C3=A9?= Roberto de Souza , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, gregkh@linuxfoundation.org, mathewk@google.com, Daniel Thompson , Jonathan Corbet , Pavel Machek , seanpaul@goo Cc: Rajat Jain , rajatxjain@gmail.com List-Id: dri-devel@lists.freedesktop.org On Mon, 04 Nov 2019, Rajat Jain wrote: > Certain laptops now come with panels that have integrated privacy > screens on them. This patch adds support for such panels by adding > a privacy-screen property to the intel_connector for the panel, that > the userspace can then use to control and check the status. > > Identifying the presence of privacy screen, and controlling it, is done > via ACPI _DSM methods. > > Currently, this is done only for the Intel display ports. But in future, > this can be done for any other ports if the hardware becomes available > (e.g. external monitors supporting integrated privacy screens?). > > Signed-off-by: Rajat Jain > Change-Id: Ic9ff07fc4a50797d2d0dfb919f11aa0821a4b548 > --- > v2: Formed by splitting the original patch into multiple patches. > - All code has been moved into i915 now. > - Privacy screen is a i915 property > - Have a local state variable to store the prvacy screen. Don't read > it from hardware. > > drivers/gpu/drm/i915/Makefile | 3 +- > drivers/gpu/drm/i915/display/intel_atomic.c | 13 +++- > .../gpu/drm/i915/display/intel_connector.c | 35 ++++++++++ > .../gpu/drm/i915/display/intel_connector.h | 1 + > .../drm/i915/display/intel_display_types.h | 4 ++ > drivers/gpu/drm/i915/display/intel_dp.c | 5 ++ > .../drm/i915/display/intel_privacy_screen.c | 70 +++++++++++++++++++ > .../drm/i915/display/intel_privacy_screen.h | 25 +++++++ > include/uapi/drm/i915_drm.h | 14 ++++ > 9 files changed, 166 insertions(+), 4 deletions(-) > create mode 100644 drivers/gpu/drm/i915/display/intel_privacy_screen.c > create mode 100644 drivers/gpu/drm/i915/display/intel_privacy_screen.h > > diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile > index 2587ea834f06..3589ebcf27bc 100644 > --- a/drivers/gpu/drm/i915/Makefile > +++ b/drivers/gpu/drm/i915/Makefile > @@ -185,7 +185,8 @@ i915-y += \ > display/intel_tc.o > i915-$(CONFIG_ACPI) += \ > display/intel_acpi.o \ > - display/intel_opregion.o > + display/intel_opregion.o \ > + display/intel_privacy_screen.o Mmmh, wonder if there'll be non-ACPI based privacy screens. I guess we can sort this out then. *shrug* > i915-$(CONFIG_DRM_FBDEV_EMULATION) += \ > display/intel_fbdev.o > > diff --git a/drivers/gpu/drm/i915/display/intel_atomic.c b/drivers/gpu/drm/i915/display/intel_atomic.c > index d3fb75bb9eb1..378772d3449c 100644 > --- a/drivers/gpu/drm/i915/display/intel_atomic.c > +++ b/drivers/gpu/drm/i915/display/intel_atomic.c > @@ -37,6 +37,7 @@ > #include "intel_atomic.h" > #include "intel_display_types.h" > #include "intel_hdcp.h" > +#include "intel_privacy_screen.h" > #include "intel_sprite.h" > > /** > @@ -57,11 +58,14 @@ int intel_digital_connector_atomic_get_property(struct drm_connector *connector, > struct drm_i915_private *dev_priv = to_i915(dev); > struct intel_digital_connector_state *intel_conn_state = > to_intel_digital_connector_state(state); > + struct intel_connector *intel_connector = to_intel_connector(connector); > > if (property == dev_priv->force_audio_property) > *val = intel_conn_state->force_audio; > else if (property == dev_priv->broadcast_rgb_property) > *val = intel_conn_state->broadcast_rgb; > + else if (property == intel_connector->privacy_screen_property) > + *val = intel_conn_state->privacy_screen_status; > else { > DRM_DEBUG_ATOMIC("Unknown property [PROP:%d:%s]\n", > property->base.id, property->name); > @@ -89,15 +93,18 @@ int intel_digital_connector_atomic_set_property(struct drm_connector *connector, > struct drm_i915_private *dev_priv = to_i915(dev); > struct intel_digital_connector_state *intel_conn_state = > to_intel_digital_connector_state(state); > + struct intel_connector *intel_connector = to_intel_connector(connector); > > if (property == dev_priv->force_audio_property) { > intel_conn_state->force_audio = val; > return 0; > - } > - > - if (property == dev_priv->broadcast_rgb_property) { > + } else if (property == dev_priv->broadcast_rgb_property) { > intel_conn_state->broadcast_rgb = val; > return 0; > + } else if (property == intel_connector->privacy_screen_property) { > + intel_privacy_screen_set_val(intel_connector, val); > + intel_conn_state->privacy_screen_status = val; > + return 0; > } > > DRM_DEBUG_ATOMIC("Unknown property [PROP:%d:%s]\n", > diff --git a/drivers/gpu/drm/i915/display/intel_connector.c b/drivers/gpu/drm/i915/display/intel_connector.c > index 308ec63207ee..3ccbf52aedf9 100644 > --- a/drivers/gpu/drm/i915/display/intel_connector.c > +++ b/drivers/gpu/drm/i915/display/intel_connector.c > @@ -281,3 +281,38 @@ intel_attach_colorspace_property(struct drm_connector *connector) > drm_object_attach_property(&connector->base, > connector->colorspace_property, 0); > } > + > +static const struct drm_prop_enum_list privacy_screen_enum[] = { > + { PRIVACY_SCREEN_DISABLED, "Disabled" }, > + { PRIVACY_SCREEN_ENABLED, "Enabled" }, > +}; > + > +/** > + * intel_attach_privacy_screen_property - > + * create and attach the connecter's privacy-screen property. * > + * @connector: connector for which to init the privacy-screen property > + * > + * This function creates and attaches the "privacy-screen" property to the > + * connector. Initial state of privacy-screen is set to disabled. > + */ > +void > +intel_attach_privacy_screen_property(struct drm_connector *connector) > +{ > + struct intel_connector *intel_connector = to_intel_connector(connector); > + struct drm_property *prop; > + > + if (!intel_connector->privacy_screen_property) { > + prop = drm_property_create_enum(connector->dev, > + DRM_MODE_PROP_ENUM, > + "privacy-screen", > + privacy_screen_enum, > + ARRAY_SIZE(privacy_screen_enum)); > + if (!prop) > + return; > + > + intel_connector->privacy_screen_property = prop; > + } > + > + drm_object_attach_property(&connector->base, prop, > + PRIVACY_SCREEN_DISABLED); > +} I think this should be a drm core level property in drm_connector.[ch] so that *all* drivers would use the same thing for privacy screens. Not i915 specific. I think this is the biggest issue in the patch series. > diff --git a/drivers/gpu/drm/i915/display/intel_connector.h b/drivers/gpu/drm/i915/display/intel_connector.h > index 93a7375c8196..61005f37a338 100644 > --- a/drivers/gpu/drm/i915/display/intel_connector.h > +++ b/drivers/gpu/drm/i915/display/intel_connector.h > @@ -31,5 +31,6 @@ void intel_attach_force_audio_property(struct drm_connector *connector); > void intel_attach_broadcast_rgb_property(struct drm_connector *connector); > void intel_attach_aspect_ratio_property(struct drm_connector *connector); > void intel_attach_colorspace_property(struct drm_connector *connector); > +void intel_attach_privacy_screen_property(struct drm_connector *connector); > > #endif /* __INTEL_CONNECTOR_H__ */ > diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h > index c2706afc069b..83b8c98049a7 100644 > --- a/drivers/gpu/drm/i915/display/intel_display_types.h > +++ b/drivers/gpu/drm/i915/display/intel_display_types.h > @@ -426,6 +426,9 @@ struct intel_connector { > struct work_struct modeset_retry_work; > > struct intel_hdcp hdcp; > + > + /* Optional "privacy-screen" property for the connector panel */ > + struct drm_property *privacy_screen_property; > }; > > struct intel_digital_connector_state { > @@ -433,6 +436,7 @@ struct intel_digital_connector_state { > > enum hdmi_force_audio force_audio; > int broadcast_rgb; > + enum intel_privacy_screen_status privacy_screen_status; > }; > > #define to_intel_digital_connector_state(x) container_of(x, struct intel_digital_connector_state, base) > diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c > index 4fac408a4299..1963e92404ba 100644 > --- a/drivers/gpu/drm/i915/display/intel_dp.c > +++ b/drivers/gpu/drm/i915/display/intel_dp.c > @@ -62,6 +62,7 @@ > #include "intel_lspcon.h" > #include "intel_lvds.h" > #include "intel_panel.h" > +#include "intel_privacy_screen.h" > #include "intel_psr.h" > #include "intel_sideband.h" > #include "intel_tc.h" > @@ -6358,6 +6359,10 @@ intel_dp_add_properties(struct intel_dp *intel_dp, struct drm_connector *connect > > /* Lookup the ACPI node corresponding to the connector */ > intel_connector_lookup_acpi_node(intel_connector); > + > + /* Check for integrated Privacy screen support */ > + if (intel_privacy_screen_present(intel_connector)) > + intel_attach_privacy_screen_property(connector); > } > } > > diff --git a/drivers/gpu/drm/i915/display/intel_privacy_screen.c b/drivers/gpu/drm/i915/display/intel_privacy_screen.c > new file mode 100644 > index 000000000000..4c422e38c51a > --- /dev/null > +++ b/drivers/gpu/drm/i915/display/intel_privacy_screen.c > @@ -0,0 +1,70 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later Please read http://mid.mail-archive.com/CAKMK7uH-8+tbKsAoiChsxELEc_77RVVxP2wapHWhqB+0Viifog@mail.gmail.com > +/* > + * Intel ACPI privacy screen code > + * > + * Copyright © 2019 Google Inc. > + */ > + > +#include > + > +#include "intel_privacy_screen.h" > + > +#define CONNECTOR_DSM_REVID 1 > + > +#define CONNECTOR_DSM_FN_PRIVACY_ENABLE 2 > +#define CONNECTOR_DSM_FN_PRIVACY_DISABLE 3 > + > +static const guid_t drm_conn_dsm_guid = > + GUID_INIT(0xC7033113, 0x8720, 0x4CEB, > + 0x90, 0x90, 0x9D, 0x52, 0xB3, 0xE5, 0x2D, 0x73); > + > +/* Makes _DSM call to set privacy screen status */ > +static void acpi_privacy_screen_call_dsm(acpi_handle conn_handle, u64 func) > +{ > + union acpi_object *obj; > + > + obj = acpi_evaluate_dsm(conn_handle, &drm_conn_dsm_guid, > + CONNECTOR_DSM_REVID, func, NULL); > + if (!obj) { > + DRM_DEBUG_DRIVER("failed to evaluate _DSM for fn %llx\n", func); > + return; > + } > + > + ACPI_FREE(obj); > +} > + > +void intel_privacy_screen_set_val(struct intel_connector *intel_connector, > + enum intel_privacy_screen_status val) Just name the parameter connector, not intel_connector. This throughout. > +{ > + acpi_handle acpi_handle = intel_connector->acpi_handle; > + > + if (!acpi_handle) > + return; > + > + if (val == PRIVACY_SCREEN_DISABLED) > + acpi_privacy_screen_call_dsm(acpi_handle, > + CONNECTOR_DSM_FN_PRIVACY_DISABLE); > + else if (val == PRIVACY_SCREEN_ENABLED) > + acpi_privacy_screen_call_dsm(acpi_handle, > + CONNECTOR_DSM_FN_PRIVACY_ENABLE); else complain? > +} > + > +bool intel_privacy_screen_present(struct intel_connector *intel_connector) > +{ > + acpi_handle handle = intel_connector->acpi_handle; > + > + if (!handle) > + return false; > + > + if (!acpi_check_dsm(handle, &drm_conn_dsm_guid, > + CONNECTOR_DSM_REVID, > + 1 << CONNECTOR_DSM_FN_PRIVACY_ENABLE | > + 1 << CONNECTOR_DSM_FN_PRIVACY_DISABLE)) { > + DRM_WARN("%s: Odd, connector ACPI node but no privacy scrn?\n", > + dev_name(intel_connector->base.dev->dev)); > + return false; > + } > + DRM_DEV_INFO(intel_connector->base.dev->dev, > + "supports privacy screen\n"); > + return true; > +} > diff --git a/drivers/gpu/drm/i915/display/intel_privacy_screen.h b/drivers/gpu/drm/i915/display/intel_privacy_screen.h > new file mode 100644 > index 000000000000..212f73349a00 > --- /dev/null > +++ b/drivers/gpu/drm/i915/display/intel_privacy_screen.h > @@ -0,0 +1,25 @@ > +/* SPDX-License-Identifier: GPL-2.0-or-later */ > +/* > + * Copyright © 2019 Google Inc. > + */ > + > +#ifndef __DRM_PRIVACY_SCREEN_H__ > +#define __DRM_PRIVACY_SCREEN_H__ > + > +#include "intel_display_types.h" > + > +#ifdef CONFIG_ACPI > +bool intel_privacy_screen_present(struct intel_connector *intel_connector); > +void intel_privacy_screen_set_val(struct intel_connector *intel_connector, > + enum intel_privacy_screen_status val); > +#else > +bool intel_privacy_screen_present(struct intel_connector *intel_connector); > +{ > + return false; > +} > +void intel_privacy_screen_set_val(struct intel_connector *intel_connector, > + enum intel_privacy_screen_status val) > +{ } > +#endif /* CONFIG_ACPI */ > + > +#endif /* __DRM_PRIVACY_SCREEN_H__ */ > diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h > index 469dc512cca3..cf08d5636363 100644 > --- a/include/uapi/drm/i915_drm.h > +++ b/include/uapi/drm/i915_drm.h > @@ -2123,6 +2123,20 @@ struct drm_i915_query_engine_info { > struct drm_i915_engine_info engines[]; > }; > > +/** > + * enum intel_privacy_screen_status - privacy_screen status > + * > + * This enum is used to track and control the state of the integrated privacy > + * screen present on some display panels, via the "privacy-screen" property. > + * > + * @PRIVACY_SCREEN_DISABLED: The privacy-screen on the panel is disabled > + * @PRIVACY_SCREEN_ENABLED: The privacy-screen on the panel is enabled > + **/ > +enum intel_privacy_screen_status { > + PRIVACY_SCREEN_DISABLED = 0, > + PRIVACY_SCREEN_ENABLED = 1, > +}; > + The drm_property interface UAPI is based on the strings, *not* on the values. Please move the enum out of uapi into the drm code. BR, jani. > #if defined(__cplusplus) > } > #endif -- Jani Nikula, Intel Open Source Graphics Center From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5D36CC432C3 for ; Wed, 20 Nov 2019 15:04:35 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 3781D2089D for ; Wed, 20 Nov 2019 15:04:35 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3781D2089D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 85EEB6EA79; Wed, 20 Nov 2019 15:04:34 +0000 (UTC) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id 45BFE6EA76; Wed, 20 Nov 2019 15:04:33 +0000 (UTC) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 Nov 2019 07:04:32 -0800 X-IronPort-AV: E=Sophos;i="5.69,222,1571727600"; d="scan'208";a="200744757" Received: from jnikula-mobl3.fi.intel.com (HELO localhost) ([10.237.66.161]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 Nov 2019 07:04:23 -0800 From: Jani Nikula To: Rajat Jain , Maarten Lankhorst , Maxime Ripard , Sean Paul , David Airlie , Daniel Vetter , Joonas Lahtinen , Rodrigo Vivi , Ville =?utf-8?B?U3lyasOkbMOk?= , Chris Wilson , Imre Deak , =?utf-8?Q?Jos=C3=A9?= Roberto de Souza , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, gregkh@linuxfoundation.org, mathewk@google.com, Daniel Thompson , Jonathan Corbet , Pavel Machek , seanpaul@google.com, Duncan Laurie , jsbarnes@google.com, Thierry Reding Subject: Re: [PATCH v2 3/3] drm/i915: Add support for integrated privacy screens In-Reply-To: <20191104194147.185642-3-rajatja@google.com> Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo References: <20191023001206.15741-1-rajatja@google.com> <20191104194147.185642-1-rajatja@google.com> <20191104194147.185642-3-rajatja@google.com> Date: Wed, 20 Nov 2019 17:04:20 +0200 Message-ID: <87r222wpvv.fsf@intel.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Rajat Jain , rajatxjain@gmail.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Message-ID: <20191120150420.44lv6ag7v1M5_96A7xxMPVoRQ_L5oohWPXJfsO6MwxE@z> T24gTW9uLCAwNCBOb3YgMjAxOSwgUmFqYXQgSmFpbiA8cmFqYXRqYUBnb29nbGUuY29tPiB3cm90 ZToKPiBDZXJ0YWluIGxhcHRvcHMgbm93IGNvbWUgd2l0aCBwYW5lbHMgdGhhdCBoYXZlIGludGVn cmF0ZWQgcHJpdmFjeQo+IHNjcmVlbnMgb24gdGhlbS4gVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQg Zm9yIHN1Y2ggcGFuZWxzIGJ5IGFkZGluZwo+IGEgcHJpdmFjeS1zY3JlZW4gcHJvcGVydHkgdG8g dGhlIGludGVsX2Nvbm5lY3RvciBmb3IgdGhlIHBhbmVsLCB0aGF0Cj4gdGhlIHVzZXJzcGFjZSBj YW4gdGhlbiB1c2UgdG8gY29udHJvbCBhbmQgY2hlY2sgdGhlIHN0YXR1cy4KPgo+IElkZW50aWZ5 aW5nIHRoZSBwcmVzZW5jZSBvZiBwcml2YWN5IHNjcmVlbiwgYW5kIGNvbnRyb2xsaW5nIGl0LCBp cyBkb25lCj4gdmlhIEFDUEkgX0RTTSBtZXRob2RzLgo+Cj4gQ3VycmVudGx5LCB0aGlzIGlzIGRv bmUgb25seSBmb3IgdGhlIEludGVsIGRpc3BsYXkgcG9ydHMuIEJ1dCBpbiBmdXR1cmUsCj4gdGhp cyBjYW4gYmUgZG9uZSBmb3IgYW55IG90aGVyIHBvcnRzIGlmIHRoZSBoYXJkd2FyZSBiZWNvbWVz IGF2YWlsYWJsZQo+IChlLmcuIGV4dGVybmFsIG1vbml0b3JzIHN1cHBvcnRpbmcgaW50ZWdyYXRl ZCBwcml2YWN5IHNjcmVlbnM/KS4KPgo+IFNpZ25lZC1vZmYtYnk6IFJhamF0IEphaW4gPHJhamF0 amFAZ29vZ2xlLmNvbT4KPiBDaGFuZ2UtSWQ6IEljOWZmMDdmYzRhNTA3OTdkMmQwZGZiOTE5ZjEx YWEwODIxYTRiNTQ4Cj4gLS0tCj4gdjI6IEZvcm1lZCBieSBzcGxpdHRpbmcgdGhlIG9yaWdpbmFs IHBhdGNoIGludG8gbXVsdGlwbGUgcGF0Y2hlcy4KPiAgICAgLSBBbGwgY29kZSBoYXMgYmVlbiBt b3ZlZCBpbnRvIGk5MTUgbm93Lgo+ICAgICAtIFByaXZhY3kgc2NyZWVuIGlzIGEgaTkxNSBwcm9w ZXJ0eQo+ICAgICAtIEhhdmUgYSBsb2NhbCBzdGF0ZSB2YXJpYWJsZSB0byBzdG9yZSB0aGUgcHJ2 YWN5IHNjcmVlbi4gRG9uJ3QgcmVhZAo+ICAgICAgIGl0IGZyb20gaGFyZHdhcmUuCj4KPiAgZHJp dmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgICAgICAgIHwgIDMgKy0KPiAgZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9hdG9taWMuYyAgIHwgMTMgKysrLQo+ICAu Li4vZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY29ubmVjdG9yLmMgICAgfCAzNSArKysrKysr KysrCj4gIC4uLi9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jb25uZWN0b3IuaCAgICB8ICAx ICsKPiAgLi4uL2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oICAgIHwgIDQg KysKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jICAgICAgIHwgIDUg KysKPiAgLi4uL2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHJpdmFjeV9zY3JlZW4uYyAgIHwgNzAg KysrKysrKysrKysrKysrKysrKwo+ICAuLi4vZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wcml2YWN5 X3NjcmVlbi5oICAgfCAyNSArKysrKysrCj4gIGluY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCAg ICAgICAgICAgICAgICAgICB8IDE0ICsrKysKPiAgOSBmaWxlcyBjaGFuZ2VkLCAxNjYgaW5zZXJ0 aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHJpdmFjeV9zY3JlZW4uYwo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wcml2YWN5X3NjcmVlbi5o Cj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+IGluZGV4IDI1ODdlYTgzNGYwNi4uMzU4OWViY2YyN2Jj IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBAQCAtMTg1LDcgKzE4NSw4IEBAIGk5MTUteSAr PSBcCj4gIAlkaXNwbGF5L2ludGVsX3RjLm8KPiAgaTkxNS0kKENPTkZJR19BQ1BJKSArPSBcCj4g IAlkaXNwbGF5L2ludGVsX2FjcGkubyBcCj4gLQlkaXNwbGF5L2ludGVsX29wcmVnaW9uLm8KPiAr CWRpc3BsYXkvaW50ZWxfb3ByZWdpb24ubyBcCj4gKwlkaXNwbGF5L2ludGVsX3ByaXZhY3lfc2Ny ZWVuLm8KCk1tbWgsIHdvbmRlciBpZiB0aGVyZSdsbCBiZSBub24tQUNQSSBiYXNlZCBwcml2YWN5 IHNjcmVlbnMuIEkgZ3Vlc3Mgd2UKY2FuIHNvcnQgdGhpcyBvdXQgdGhlbi4gKnNocnVnKgoKPiAg aTkxNS0kKENPTkZJR19EUk1fRkJERVZfRU1VTEFUSU9OKSArPSBcCj4gIAlkaXNwbGF5L2ludGVs X2ZiZGV2Lm8KPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfYXRvbWljLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2F0b21p Yy5jCj4gaW5kZXggZDNmYjc1YmI5ZWIxLi4zNzg3NzJkMzQ0OWMgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9hdG9taWMuYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfYXRvbWljLmMKPiBAQCAtMzcsNiArMzcsNyBAQAo+ ICAjaW5jbHVkZSAiaW50ZWxfYXRvbWljLmgiCj4gICNpbmNsdWRlICJpbnRlbF9kaXNwbGF5X3R5 cGVzLmgiCj4gICNpbmNsdWRlICJpbnRlbF9oZGNwLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9wcml2 YWN5X3NjcmVlbi5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfc3ByaXRlLmgiCj4gIAo+ICAvKioKPiBA QCAtNTcsMTEgKzU4LDE0IEBAIGludCBpbnRlbF9kaWdpdGFsX2Nvbm5lY3Rvcl9hdG9taWNfZ2V0 X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gIAlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gIAlzdHJ1Y3QgaW50ZWxf ZGlnaXRhbF9jb25uZWN0b3Jfc3RhdGUgKmludGVsX2Nvbm5fc3RhdGUgPQo+ICAJCXRvX2ludGVs X2RpZ2l0YWxfY29ubmVjdG9yX3N0YXRlKHN0YXRlKTsKPiArCXN0cnVjdCBpbnRlbF9jb25uZWN0 b3IgKmludGVsX2Nvbm5lY3RvciA9IHRvX2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwo+ICAK PiAgCWlmIChwcm9wZXJ0eSA9PSBkZXZfcHJpdi0+Zm9yY2VfYXVkaW9fcHJvcGVydHkpCj4gIAkJ KnZhbCA9IGludGVsX2Nvbm5fc3RhdGUtPmZvcmNlX2F1ZGlvOwo+ICAJZWxzZSBpZiAocHJvcGVy dHkgPT0gZGV2X3ByaXYtPmJyb2FkY2FzdF9yZ2JfcHJvcGVydHkpCj4gIAkJKnZhbCA9IGludGVs X2Nvbm5fc3RhdGUtPmJyb2FkY2FzdF9yZ2I7Cj4gKwllbHNlIGlmIChwcm9wZXJ0eSA9PSBpbnRl bF9jb25uZWN0b3ItPnByaXZhY3lfc2NyZWVuX3Byb3BlcnR5KQo+ICsJCSp2YWwgPSBpbnRlbF9j b25uX3N0YXRlLT5wcml2YWN5X3NjcmVlbl9zdGF0dXM7Cj4gIAllbHNlIHsKPiAgCQlEUk1fREVC VUdfQVRPTUlDKCJVbmtub3duIHByb3BlcnR5IFtQUk9QOiVkOiVzXVxuIiwKPiAgCQkJCSBwcm9w ZXJ0eS0+YmFzZS5pZCwgcHJvcGVydHktPm5hbWUpOwo+IEBAIC04OSwxNSArOTMsMTggQEAgaW50 IGludGVsX2RpZ2l0YWxfY29ubmVjdG9yX2F0b21pY19zZXRfcHJvcGVydHkoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvciwKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHRvX2k5MTUoZGV2KTsKPiAgCXN0cnVjdCBpbnRlbF9kaWdpdGFsX2Nvbm5lY3Rvcl9zdGF0 ZSAqaW50ZWxfY29ubl9zdGF0ZSA9Cj4gIAkJdG9faW50ZWxfZGlnaXRhbF9jb25uZWN0b3Jfc3Rh dGUoc3RhdGUpOwo+ICsJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29ubmVjdG9yID0g dG9faW50ZWxfY29ubmVjdG9yKGNvbm5lY3Rvcik7Cj4gIAo+ICAJaWYgKHByb3BlcnR5ID09IGRl dl9wcml2LT5mb3JjZV9hdWRpb19wcm9wZXJ0eSkgewo+ICAJCWludGVsX2Nvbm5fc3RhdGUtPmZv cmNlX2F1ZGlvID0gdmFsOwo+ICAJCXJldHVybiAwOwo+IC0JfQo+IC0KPiAtCWlmIChwcm9wZXJ0 eSA9PSBkZXZfcHJpdi0+YnJvYWRjYXN0X3JnYl9wcm9wZXJ0eSkgewo+ICsJfSBlbHNlIGlmIChw cm9wZXJ0eSA9PSBkZXZfcHJpdi0+YnJvYWRjYXN0X3JnYl9wcm9wZXJ0eSkgewo+ICAJCWludGVs X2Nvbm5fc3RhdGUtPmJyb2FkY2FzdF9yZ2IgPSB2YWw7Cj4gIAkJcmV0dXJuIDA7Cj4gKwl9IGVs c2UgaWYgKHByb3BlcnR5ID09IGludGVsX2Nvbm5lY3Rvci0+cHJpdmFjeV9zY3JlZW5fcHJvcGVy dHkpIHsKPiArCQlpbnRlbF9wcml2YWN5X3NjcmVlbl9zZXRfdmFsKGludGVsX2Nvbm5lY3Rvciwg dmFsKTsKPiArCQlpbnRlbF9jb25uX3N0YXRlLT5wcml2YWN5X3NjcmVlbl9zdGF0dXMgPSB2YWw7 Cj4gKwkJcmV0dXJuIDA7Cj4gIAl9Cj4gIAo+ICAJRFJNX0RFQlVHX0FUT01JQygiVW5rbm93biBw cm9wZXJ0eSBbUFJPUDolZDolc11cbiIsCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfY29ubmVjdG9yLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNw bGF5L2ludGVsX2Nvbm5lY3Rvci5jCj4gaW5kZXggMzA4ZWM2MzIwN2VlLi4zY2NiZjUyYWVkZjkg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jb25uZWN0 b3IuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY29ubmVjdG9y LmMKPiBAQCAtMjgxLDMgKzI4MSwzOCBAQCBpbnRlbF9hdHRhY2hfY29sb3JzcGFjZV9wcm9wZXJ0 eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ICAJCWRybV9vYmplY3RfYXR0YWNo X3Byb3BlcnR5KCZjb25uZWN0b3ItPmJhc2UsCj4gIAkJCQkJICAgY29ubmVjdG9yLT5jb2xvcnNw YWNlX3Byb3BlcnR5LCAwKTsKPiAgfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcHJv cF9lbnVtX2xpc3QgcHJpdmFjeV9zY3JlZW5fZW51bVtdID0gewo+ICsJeyBQUklWQUNZX1NDUkVF Tl9ESVNBQkxFRCwgIkRpc2FibGVkIiB9LAo+ICsJeyBQUklWQUNZX1NDUkVFTl9FTkFCTEVELCAi RW5hYmxlZCIgfSwKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBpbnRlbF9hdHRhY2hfcHJpdmFjeV9z Y3JlZW5fcHJvcGVydHkgLQo+ICsgKiAgICAgY3JlYXRlIGFuZCBhdHRhY2ggdGhlIGNvbm5lY3Rl cidzIHByaXZhY3ktc2NyZWVuIHByb3BlcnR5LiAqCj4gKyAqIEBjb25uZWN0b3I6IGNvbm5lY3Rv ciBmb3Igd2hpY2ggdG8gaW5pdCB0aGUgcHJpdmFjeS1zY3JlZW4gcHJvcGVydHkKPiArICoKPiAr ICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGFuZCBhdHRhY2hlcyB0aGUgInByaXZhY3ktc2NyZWVu IiBwcm9wZXJ0eSB0byB0aGUKPiArICogY29ubmVjdG9yLiBJbml0aWFsIHN0YXRlIG9mIHByaXZh Y3ktc2NyZWVuIGlzIHNldCB0byBkaXNhYmxlZC4KPiArICovCj4gK3ZvaWQKPiAraW50ZWxfYXR0 YWNoX3ByaXZhY3lfc2NyZWVuX3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3RvciA9IHRv X2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwo+ICsJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJv cDsKPiArCj4gKwlpZiAoIWludGVsX2Nvbm5lY3Rvci0+cHJpdmFjeV9zY3JlZW5fcHJvcGVydHkp IHsKPiArCQlwcm9wID0gZHJtX3Byb3BlcnR5X2NyZWF0ZV9lbnVtKGNvbm5lY3Rvci0+ZGV2LAo+ ICsJCQkJCQlEUk1fTU9ERV9QUk9QX0VOVU0sCj4gKwkJCQkJCSJwcml2YWN5LXNjcmVlbiIsCj4g KwkJCQkJCXByaXZhY3lfc2NyZWVuX2VudW0sCj4gKwkJCQkJICAgIEFSUkFZX1NJWkUocHJpdmFj eV9zY3JlZW5fZW51bSkpOwo+ICsJCWlmICghcHJvcCkKPiArCQkJcmV0dXJuOwo+ICsKPiArCQlp bnRlbF9jb25uZWN0b3ItPnByaXZhY3lfc2NyZWVuX3Byb3BlcnR5ID0gcHJvcDsKPiArCX0KPiAr Cj4gKwlkcm1fb2JqZWN0X2F0dGFjaF9wcm9wZXJ0eSgmY29ubmVjdG9yLT5iYXNlLCBwcm9wLAo+ ICsJCQkJICAgUFJJVkFDWV9TQ1JFRU5fRElTQUJMRUQpOwo+ICt9CgpJIHRoaW5rIHRoaXMgc2hv dWxkIGJlIGEgZHJtIGNvcmUgbGV2ZWwgcHJvcGVydHkgaW4gZHJtX2Nvbm5lY3Rvci5bY2hdCnNv IHRoYXQgKmFsbCogZHJpdmVycyB3b3VsZCB1c2UgdGhlIHNhbWUgdGhpbmcgZm9yIHByaXZhY3kg c2NyZWVucy4gTm90Cmk5MTUgc3BlY2lmaWMuCgpJIHRoaW5rIHRoaXMgaXMgdGhlIGJpZ2dlc3Qg aXNzdWUgaW4gdGhlIHBhdGNoIHNlcmllcy4KCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfY29ubmVjdG9yLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2Nvbm5lY3Rvci5oCj4gaW5kZXggOTNhNzM3NWM4MTk2Li42MTAwNWYzN2Ez MzggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jb25u ZWN0b3IuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY29ubmVj dG9yLmgKPiBAQCAtMzEsNSArMzEsNiBAQCB2b2lkIGludGVsX2F0dGFjaF9mb3JjZV9hdWRpb19w cm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKPiAgdm9pZCBpbnRlbF9h dHRhY2hfYnJvYWRjYXN0X3JnYl9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yKTsKPiAgdm9pZCBpbnRlbF9hdHRhY2hfYXNwZWN0X3JhdGlvX3Byb3BlcnR5KHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwo+ICB2b2lkIGludGVsX2F0dGFjaF9jb2xvcnNwYWNl X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwo+ICt2b2lkIGludGVs X2F0dGFjaF9wcml2YWN5X3NjcmVlbl9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yKTsKPiAgCj4gICNlbmRpZiAvKiBfX0lOVEVMX0NPTk5FQ1RPUl9IX18gKi8KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVz LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaAo+ IGluZGV4IGMyNzA2YWZjMDY5Yi4uODNiOGM5ODA0OWE3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmgKPiBAQCAtNDI2LDYg KzQyNiw5IEBAIHN0cnVjdCBpbnRlbF9jb25uZWN0b3Igewo+ICAJc3RydWN0IHdvcmtfc3RydWN0 IG1vZGVzZXRfcmV0cnlfd29yazsKPiAgCj4gIAlzdHJ1Y3QgaW50ZWxfaGRjcCBoZGNwOwo+ICsK PiArCS8qIE9wdGlvbmFsICJwcml2YWN5LXNjcmVlbiIgcHJvcGVydHkgZm9yIHRoZSBjb25uZWN0 b3IgcGFuZWwgKi8KPiArCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByaXZhY3lfc2NyZWVuX3Byb3Bl cnR5Owo+ICB9Owo+ICAKPiAgc3RydWN0IGludGVsX2RpZ2l0YWxfY29ubmVjdG9yX3N0YXRlIHsK PiBAQCAtNDMzLDYgKzQzNiw3IEBAIHN0cnVjdCBpbnRlbF9kaWdpdGFsX2Nvbm5lY3Rvcl9zdGF0 ZSB7Cj4gIAo+ICAJZW51bSBoZG1pX2ZvcmNlX2F1ZGlvIGZvcmNlX2F1ZGlvOwo+ICAJaW50IGJy b2FkY2FzdF9yZ2I7Cj4gKwllbnVtIGludGVsX3ByaXZhY3lfc2NyZWVuX3N0YXR1cyBwcml2YWN5 X3NjcmVlbl9zdGF0dXM7Cj4gIH07Cj4gIAo+ICAjZGVmaW5lIHRvX2ludGVsX2RpZ2l0YWxfY29u bmVjdG9yX3N0YXRlKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9jb25u ZWN0b3Jfc3RhdGUsIGJhc2UpCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAu Ywo+IGluZGV4IDRmYWM0MDhhNDI5OS4uMTk2M2U5MjQwNGJhIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYwo+IEBAIC02Miw2ICs2Miw3IEBACj4gICNpbmNsdWRl ICJpbnRlbF9sc3Bjb24uaCIKPiAgI2luY2x1ZGUgImludGVsX2x2ZHMuaCIKPiAgI2luY2x1ZGUg ImludGVsX3BhbmVsLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9wcml2YWN5X3NjcmVlbi5oIgo+ICAj aW5jbHVkZSAiaW50ZWxfcHNyLmgiCj4gICNpbmNsdWRlICJpbnRlbF9zaWRlYmFuZC5oIgo+ICAj aW5jbHVkZSAiaW50ZWxfdGMuaCIKPiBAQCAtNjM1OCw2ICs2MzU5LDEwIEBAIGludGVsX2RwX2Fk ZF9wcm9wZXJ0aWVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0Cj4gIAo+ICAJCS8qIExvb2t1cCB0aGUgQUNQSSBub2RlIGNvcnJlc3BvbmRp bmcgdG8gdGhlIGNvbm5lY3RvciAqLwo+ICAJCWludGVsX2Nvbm5lY3Rvcl9sb29rdXBfYWNwaV9u b2RlKGludGVsX2Nvbm5lY3Rvcik7Cj4gKwo+ICsJCS8qIENoZWNrIGZvciBpbnRlZ3JhdGVkIFBy aXZhY3kgc2NyZWVuIHN1cHBvcnQgKi8KPiArCQlpZiAoaW50ZWxfcHJpdmFjeV9zY3JlZW5fcHJl c2VudChpbnRlbF9jb25uZWN0b3IpKQo+ICsJCQlpbnRlbF9hdHRhY2hfcHJpdmFjeV9zY3JlZW5f cHJvcGVydHkoY29ubmVjdG9yKTsKPiAgCX0KPiAgfQo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wcml2YWN5X3NjcmVlbi5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wcml2YWN5X3NjcmVlbi5jCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjRjNDIyZTM4YzUxYQo+IC0tLSAvZGV2L251 bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3ByaXZhY3lfc2Ny ZWVuLmMKPiBAQCAtMCwwICsxLDcwIEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wLW9yLWxhdGVyCgpQbGVhc2UgcmVhZCBodHRwOi8vbWlkLm1haWwtYXJjaGl2ZS5jb20v Q0FLTUs3dUgtOCt0YktzQW9pQ2hzeEVMRWNfNzdSVlZ4UDJ3YXBIV2hxQiswVmlpZm9nQG1haWwu Z21haWwuY29tCgo+ICsvKgo+ICsgKiBJbnRlbCBBQ1BJIHByaXZhY3kgc2NyZWVuIGNvZGUKPiAr ICoKPiArICogQ29weXJpZ2h0IMKpIDIwMTkgR29vZ2xlIEluYy4KPiArICovCj4gKwo+ICsjaW5j bHVkZSA8bGludXgvYWNwaS5oPgo+ICsKPiArI2luY2x1ZGUgImludGVsX3ByaXZhY3lfc2NyZWVu LmgiCj4gKwo+ICsjZGVmaW5lIENPTk5FQ1RPUl9EU01fUkVWSUQgMQo+ICsKPiArI2RlZmluZSBD T05ORUNUT1JfRFNNX0ZOX1BSSVZBQ1lfRU5BQkxFCQkyCj4gKyNkZWZpbmUgQ09OTkVDVE9SX0RT TV9GTl9QUklWQUNZX0RJU0FCTEUJCTMKPiArCj4gK3N0YXRpYyBjb25zdCBndWlkX3QgZHJtX2Nv bm5fZHNtX2d1aWQgPQo+ICsJR1VJRF9JTklUKDB4QzcwMzMxMTMsIDB4ODcyMCwgMHg0Q0VCLAo+ ICsJCSAgMHg5MCwgMHg5MCwgMHg5RCwgMHg1MiwgMHhCMywgMHhFNSwgMHgyRCwgMHg3Myk7Cj4g Kwo+ICsvKiBNYWtlcyBfRFNNIGNhbGwgdG8gc2V0IHByaXZhY3kgc2NyZWVuIHN0YXR1cyAqLwo+ ICtzdGF0aWMgdm9pZCBhY3BpX3ByaXZhY3lfc2NyZWVuX2NhbGxfZHNtKGFjcGlfaGFuZGxlIGNv bm5faGFuZGxlLCB1NjQgZnVuYykKPiArewo+ICsJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKPiAr Cj4gKwlvYmogPSBhY3BpX2V2YWx1YXRlX2RzbShjb25uX2hhbmRsZSwgJmRybV9jb25uX2RzbV9n dWlkLAo+ICsJCQkJQ09OTkVDVE9SX0RTTV9SRVZJRCwgZnVuYywgTlVMTCk7Cj4gKwlpZiAoIW9i aikgewo+ICsJCURSTV9ERUJVR19EUklWRVIoImZhaWxlZCB0byBldmFsdWF0ZSBfRFNNIGZvciBm biAlbGx4XG4iLCBmdW5jKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJQUNQSV9GUkVFKG9i aik7Cj4gK30KPiArCj4gK3ZvaWQgaW50ZWxfcHJpdmFjeV9zY3JlZW5fc2V0X3ZhbChzdHJ1Y3Qg aW50ZWxfY29ubmVjdG9yICppbnRlbF9jb25uZWN0b3IsCj4gKwkJCQkgIGVudW0gaW50ZWxfcHJp dmFjeV9zY3JlZW5fc3RhdHVzIHZhbCkKCkp1c3QgbmFtZSB0aGUgcGFyYW1ldGVyIGNvbm5lY3Rv ciwgbm90IGludGVsX2Nvbm5lY3Rvci4gVGhpcyB0aHJvdWdob3V0LgoKPiArewo+ICsJYWNwaV9o YW5kbGUgYWNwaV9oYW5kbGUgPSBpbnRlbF9jb25uZWN0b3ItPmFjcGlfaGFuZGxlOwo+ICsKPiAr CWlmICghYWNwaV9oYW5kbGUpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWlmICh2YWwgPT0gUFJJVkFD WV9TQ1JFRU5fRElTQUJMRUQpCj4gKwkJYWNwaV9wcml2YWN5X3NjcmVlbl9jYWxsX2RzbShhY3Bp X2hhbmRsZSwKPiArCQkJCQkgICAgIENPTk5FQ1RPUl9EU01fRk5fUFJJVkFDWV9ESVNBQkxFKTsK PiArCWVsc2UgaWYgKHZhbCA9PSBQUklWQUNZX1NDUkVFTl9FTkFCTEVEKQo+ICsJCWFjcGlfcHJp dmFjeV9zY3JlZW5fY2FsbF9kc20oYWNwaV9oYW5kbGUsCj4gKwkJCQkJICAgICBDT05ORUNUT1Jf RFNNX0ZOX1BSSVZBQ1lfRU5BQkxFKTsKCmVsc2UgY29tcGxhaW4/Cgo+ICt9Cj4gKwo+ICtib29s IGludGVsX3ByaXZhY3lfc2NyZWVuX3ByZXNlbnQoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50 ZWxfY29ubmVjdG9yKQo+ICt7Cj4gKwlhY3BpX2hhbmRsZSBoYW5kbGUgPSBpbnRlbF9jb25uZWN0 b3ItPmFjcGlfaGFuZGxlOwo+ICsKPiArCWlmICghaGFuZGxlKQo+ICsJCXJldHVybiBmYWxzZTsK PiArCj4gKwlpZiAoIWFjcGlfY2hlY2tfZHNtKGhhbmRsZSwgJmRybV9jb25uX2RzbV9ndWlkLAo+ ICsJCQkgICAgQ09OTkVDVE9SX0RTTV9SRVZJRCwKPiArCQkJICAgIDEgPDwgQ09OTkVDVE9SX0RT TV9GTl9QUklWQUNZX0VOQUJMRSB8Cj4gKwkJCSAgICAxIDw8IENPTk5FQ1RPUl9EU01fRk5fUFJJ VkFDWV9ESVNBQkxFKSkgewo+ICsJCURSTV9XQVJOKCIlczogT2RkLCBjb25uZWN0b3IgQUNQSSBu b2RlIGJ1dCBubyBwcml2YWN5IHNjcm4/XG4iLAo+ICsJCQkgZGV2X25hbWUoaW50ZWxfY29ubmVj dG9yLT5iYXNlLmRldi0+ZGV2KSk7Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ICsJRFJNX0RF Vl9JTkZPKGludGVsX2Nvbm5lY3Rvci0+YmFzZS5kZXYtPmRldiwKPiArCQkgICAgICJzdXBwb3J0 cyBwcml2YWN5IHNjcmVlblxuIik7Cj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3ByaXZhY3lfc2NyZWVuLmggYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3ByaXZhY3lfc2NyZWVuLmgKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMjEyZjczMzQ5YTAwCj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHJp dmFjeV9zY3JlZW4uaAo+IEBAIC0wLDAgKzEsMjUgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTkg R29vZ2xlIEluYy4KPiArICovCj4gKwo+ICsjaWZuZGVmIF9fRFJNX1BSSVZBQ1lfU0NSRUVOX0hf Xwo+ICsjZGVmaW5lIF9fRFJNX1BSSVZBQ1lfU0NSRUVOX0hfXwo+ICsKPiArI2luY2x1ZGUgImlu dGVsX2Rpc3BsYXlfdHlwZXMuaCIKPiArCj4gKyNpZmRlZiBDT05GSUdfQUNQSQo+ICtib29sIGlu dGVsX3ByaXZhY3lfc2NyZWVuX3ByZXNlbnQoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxf Y29ubmVjdG9yKTsKPiArdm9pZCBpbnRlbF9wcml2YWN5X3NjcmVlbl9zZXRfdmFsKHN0cnVjdCBp bnRlbF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3RvciwKPiArCQkJCSAgZW51bSBpbnRlbF9wcml2 YWN5X3NjcmVlbl9zdGF0dXMgdmFsKTsKPiArI2Vsc2UKPiArYm9vbCBpbnRlbF9wcml2YWN5X3Nj cmVlbl9wcmVzZW50KHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3Rvcik7Cj4g K3sKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICt2b2lkIGludGVsX3ByaXZhY3lfc2NyZWVuX3Nl dF92YWwoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29ubmVjdG9yLAo+ICsJCQkJICBl bnVtIGludGVsX3ByaXZhY3lfc2NyZWVuX3N0YXR1cyB2YWwpCj4gK3sgfQo+ICsjZW5kaWYgLyog Q09ORklHX0FDUEkgKi8KPiArCj4gKyNlbmRpZiAvKiBfX0RSTV9QUklWQUNZX1NDUkVFTl9IX18g Ki8KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oIGIvaW5jbHVkZS91 YXBpL2RybS9pOTE1X2RybS5oCj4gaW5kZXggNDY5ZGM1MTJjY2EzLi5jZjA4ZDU2MzYzNjMgMTAw NjQ0Cj4gLS0tIGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCj4gKysrIGIvaW5jbHVkZS91 YXBpL2RybS9pOTE1X2RybS5oCj4gQEAgLTIxMjMsNiArMjEyMywyMCBAQCBzdHJ1Y3QgZHJtX2k5 MTVfcXVlcnlfZW5naW5lX2luZm8gewo+ICAJc3RydWN0IGRybV9pOTE1X2VuZ2luZV9pbmZvIGVu Z2luZXNbXTsKPiAgfTsKPiAgCj4gKy8qKgo+ICsgKiBlbnVtIGludGVsX3ByaXZhY3lfc2NyZWVu X3N0YXR1cyAtIHByaXZhY3lfc2NyZWVuIHN0YXR1cwo+ICsgKgo+ICsgKiBUaGlzIGVudW0gaXMg dXNlZCB0byB0cmFjayBhbmQgY29udHJvbCB0aGUgc3RhdGUgb2YgdGhlIGludGVncmF0ZWQgcHJp dmFjeQo+ICsgKiBzY3JlZW4gcHJlc2VudCBvbiBzb21lIGRpc3BsYXkgcGFuZWxzLCB2aWEgdGhl ICJwcml2YWN5LXNjcmVlbiIgcHJvcGVydHkuCj4gKyAqCj4gKyAqIEBQUklWQUNZX1NDUkVFTl9E SVNBQkxFRDogVGhlIHByaXZhY3ktc2NyZWVuIG9uIHRoZSBwYW5lbCBpcyBkaXNhYmxlZAo+ICsg KiBAUFJJVkFDWV9TQ1JFRU5fRU5BQkxFRDogIFRoZSBwcml2YWN5LXNjcmVlbiBvbiB0aGUgcGFu ZWwgaXMgZW5hYmxlZAo+ICsgKiovCj4gK2VudW0gaW50ZWxfcHJpdmFjeV9zY3JlZW5fc3RhdHVz IHsKPiArCVBSSVZBQ1lfU0NSRUVOX0RJU0FCTEVEID0gMCwKPiArCVBSSVZBQ1lfU0NSRUVOX0VO QUJMRUQgPSAxLAo+ICt9Owo+ICsKClRoZSBkcm1fcHJvcGVydHkgaW50ZXJmYWNlIFVBUEkgaXMg YmFzZWQgb24gdGhlIHN0cmluZ3MsICpub3QqIG9uIHRoZQp2YWx1ZXMuIFBsZWFzZSBtb3ZlIHRo ZSBlbnVtIG91dCBvZiB1YXBpIGludG8gdGhlIGRybSBjb2RlLgoKQlIsCmphbmkuCgo+ICAjaWYg ZGVmaW5lZChfX2NwbHVzcGx1cykKPiAgfQo+ICAjZW5kaWYKCi0tIApKYW5pIE5pa3VsYSwgSW50 ZWwgT3BlbiBTb3VyY2UgR3JhcGhpY3MgQ2VudGVyCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2RyaS1kZXZlbA== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.7 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 19D75C43215 for ; Wed, 20 Nov 2019 15:04:37 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E885220885 for ; Wed, 20 Nov 2019 15:04:36 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E885220885 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id D68986EA7B; Wed, 20 Nov 2019 15:04:34 +0000 (UTC) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id 45BFE6EA76; Wed, 20 Nov 2019 15:04:33 +0000 (UTC) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 Nov 2019 07:04:32 -0800 X-IronPort-AV: E=Sophos;i="5.69,222,1571727600"; d="scan'208";a="200744757" Received: from jnikula-mobl3.fi.intel.com (HELO localhost) ([10.237.66.161]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 Nov 2019 07:04:23 -0800 From: Jani Nikula To: Rajat Jain , Maarten Lankhorst , Maxime Ripard , Sean Paul , David Airlie , Daniel Vetter , Joonas Lahtinen , Rodrigo Vivi , Ville =?utf-8?B?U3lyasOkbMOk?= , Chris Wilson , Imre Deak , =?utf-8?Q?Jos=C3=A9?= Roberto de Souza , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, gregkh@linuxfoundation.org, mathewk@google.com, Daniel Thompson , Jonathan Corbet , Pavel Machek , seanpaul@google.com, Duncan Laurie , jsbarnes@google.com, Thierry Reding In-Reply-To: <20191104194147.185642-3-rajatja@google.com> Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo References: <20191023001206.15741-1-rajatja@google.com> <20191104194147.185642-1-rajatja@google.com> <20191104194147.185642-3-rajatja@google.com> Date: Wed, 20 Nov 2019 17:04:20 +0200 Message-ID: <87r222wpvv.fsf@intel.com> MIME-Version: 1.0 Subject: Re: [Intel-gfx] [PATCH v2 3/3] drm/i915: Add support for integrated privacy screens X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Rajat Jain , rajatxjain@gmail.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Message-ID: <20191120150420.fPzWbXQk8AjMWIA-_rUoX2kBhzUPCtoRKz1x2Sd_K2g@z> T24gTW9uLCAwNCBOb3YgMjAxOSwgUmFqYXQgSmFpbiA8cmFqYXRqYUBnb29nbGUuY29tPiB3cm90 ZToKPiBDZXJ0YWluIGxhcHRvcHMgbm93IGNvbWUgd2l0aCBwYW5lbHMgdGhhdCBoYXZlIGludGVn cmF0ZWQgcHJpdmFjeQo+IHNjcmVlbnMgb24gdGhlbS4gVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQg Zm9yIHN1Y2ggcGFuZWxzIGJ5IGFkZGluZwo+IGEgcHJpdmFjeS1zY3JlZW4gcHJvcGVydHkgdG8g dGhlIGludGVsX2Nvbm5lY3RvciBmb3IgdGhlIHBhbmVsLCB0aGF0Cj4gdGhlIHVzZXJzcGFjZSBj YW4gdGhlbiB1c2UgdG8gY29udHJvbCBhbmQgY2hlY2sgdGhlIHN0YXR1cy4KPgo+IElkZW50aWZ5 aW5nIHRoZSBwcmVzZW5jZSBvZiBwcml2YWN5IHNjcmVlbiwgYW5kIGNvbnRyb2xsaW5nIGl0LCBp cyBkb25lCj4gdmlhIEFDUEkgX0RTTSBtZXRob2RzLgo+Cj4gQ3VycmVudGx5LCB0aGlzIGlzIGRv bmUgb25seSBmb3IgdGhlIEludGVsIGRpc3BsYXkgcG9ydHMuIEJ1dCBpbiBmdXR1cmUsCj4gdGhp cyBjYW4gYmUgZG9uZSBmb3IgYW55IG90aGVyIHBvcnRzIGlmIHRoZSBoYXJkd2FyZSBiZWNvbWVz IGF2YWlsYWJsZQo+IChlLmcuIGV4dGVybmFsIG1vbml0b3JzIHN1cHBvcnRpbmcgaW50ZWdyYXRl ZCBwcml2YWN5IHNjcmVlbnM/KS4KPgo+IFNpZ25lZC1vZmYtYnk6IFJhamF0IEphaW4gPHJhamF0 amFAZ29vZ2xlLmNvbT4KPiBDaGFuZ2UtSWQ6IEljOWZmMDdmYzRhNTA3OTdkMmQwZGZiOTE5ZjEx YWEwODIxYTRiNTQ4Cj4gLS0tCj4gdjI6IEZvcm1lZCBieSBzcGxpdHRpbmcgdGhlIG9yaWdpbmFs IHBhdGNoIGludG8gbXVsdGlwbGUgcGF0Y2hlcy4KPiAgICAgLSBBbGwgY29kZSBoYXMgYmVlbiBt b3ZlZCBpbnRvIGk5MTUgbm93Lgo+ICAgICAtIFByaXZhY3kgc2NyZWVuIGlzIGEgaTkxNSBwcm9w ZXJ0eQo+ICAgICAtIEhhdmUgYSBsb2NhbCBzdGF0ZSB2YXJpYWJsZSB0byBzdG9yZSB0aGUgcHJ2 YWN5IHNjcmVlbi4gRG9uJ3QgcmVhZAo+ICAgICAgIGl0IGZyb20gaGFyZHdhcmUuCj4KPiAgZHJp dmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgICAgICAgIHwgIDMgKy0KPiAgZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9hdG9taWMuYyAgIHwgMTMgKysrLQo+ICAu Li4vZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY29ubmVjdG9yLmMgICAgfCAzNSArKysrKysr KysrCj4gIC4uLi9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jb25uZWN0b3IuaCAgICB8ICAx ICsKPiAgLi4uL2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oICAgIHwgIDQg KysKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jICAgICAgIHwgIDUg KysKPiAgLi4uL2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHJpdmFjeV9zY3JlZW4uYyAgIHwgNzAg KysrKysrKysrKysrKysrKysrKwo+ICAuLi4vZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wcml2YWN5 X3NjcmVlbi5oICAgfCAyNSArKysrKysrCj4gIGluY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCAg ICAgICAgICAgICAgICAgICB8IDE0ICsrKysKPiAgOSBmaWxlcyBjaGFuZ2VkLCAxNjYgaW5zZXJ0 aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHJpdmFjeV9zY3JlZW4uYwo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wcml2YWN5X3NjcmVlbi5o Cj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+IGluZGV4IDI1ODdlYTgzNGYwNi4uMzU4OWViY2YyN2Jj IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBAQCAtMTg1LDcgKzE4NSw4IEBAIGk5MTUteSAr PSBcCj4gIAlkaXNwbGF5L2ludGVsX3RjLm8KPiAgaTkxNS0kKENPTkZJR19BQ1BJKSArPSBcCj4g IAlkaXNwbGF5L2ludGVsX2FjcGkubyBcCj4gLQlkaXNwbGF5L2ludGVsX29wcmVnaW9uLm8KPiAr CWRpc3BsYXkvaW50ZWxfb3ByZWdpb24ubyBcCj4gKwlkaXNwbGF5L2ludGVsX3ByaXZhY3lfc2Ny ZWVuLm8KCk1tbWgsIHdvbmRlciBpZiB0aGVyZSdsbCBiZSBub24tQUNQSSBiYXNlZCBwcml2YWN5 IHNjcmVlbnMuIEkgZ3Vlc3Mgd2UKY2FuIHNvcnQgdGhpcyBvdXQgdGhlbi4gKnNocnVnKgoKPiAg aTkxNS0kKENPTkZJR19EUk1fRkJERVZfRU1VTEFUSU9OKSArPSBcCj4gIAlkaXNwbGF5L2ludGVs X2ZiZGV2Lm8KPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfYXRvbWljLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2F0b21p Yy5jCj4gaW5kZXggZDNmYjc1YmI5ZWIxLi4zNzg3NzJkMzQ0OWMgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9hdG9taWMuYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfYXRvbWljLmMKPiBAQCAtMzcsNiArMzcsNyBAQAo+ ICAjaW5jbHVkZSAiaW50ZWxfYXRvbWljLmgiCj4gICNpbmNsdWRlICJpbnRlbF9kaXNwbGF5X3R5 cGVzLmgiCj4gICNpbmNsdWRlICJpbnRlbF9oZGNwLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9wcml2 YWN5X3NjcmVlbi5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfc3ByaXRlLmgiCj4gIAo+ICAvKioKPiBA QCAtNTcsMTEgKzU4LDE0IEBAIGludCBpbnRlbF9kaWdpdGFsX2Nvbm5lY3Rvcl9hdG9taWNfZ2V0 X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gIAlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gIAlzdHJ1Y3QgaW50ZWxf ZGlnaXRhbF9jb25uZWN0b3Jfc3RhdGUgKmludGVsX2Nvbm5fc3RhdGUgPQo+ICAJCXRvX2ludGVs X2RpZ2l0YWxfY29ubmVjdG9yX3N0YXRlKHN0YXRlKTsKPiArCXN0cnVjdCBpbnRlbF9jb25uZWN0 b3IgKmludGVsX2Nvbm5lY3RvciA9IHRvX2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwo+ICAK PiAgCWlmIChwcm9wZXJ0eSA9PSBkZXZfcHJpdi0+Zm9yY2VfYXVkaW9fcHJvcGVydHkpCj4gIAkJ KnZhbCA9IGludGVsX2Nvbm5fc3RhdGUtPmZvcmNlX2F1ZGlvOwo+ICAJZWxzZSBpZiAocHJvcGVy dHkgPT0gZGV2X3ByaXYtPmJyb2FkY2FzdF9yZ2JfcHJvcGVydHkpCj4gIAkJKnZhbCA9IGludGVs X2Nvbm5fc3RhdGUtPmJyb2FkY2FzdF9yZ2I7Cj4gKwllbHNlIGlmIChwcm9wZXJ0eSA9PSBpbnRl bF9jb25uZWN0b3ItPnByaXZhY3lfc2NyZWVuX3Byb3BlcnR5KQo+ICsJCSp2YWwgPSBpbnRlbF9j b25uX3N0YXRlLT5wcml2YWN5X3NjcmVlbl9zdGF0dXM7Cj4gIAllbHNlIHsKPiAgCQlEUk1fREVC VUdfQVRPTUlDKCJVbmtub3duIHByb3BlcnR5IFtQUk9QOiVkOiVzXVxuIiwKPiAgCQkJCSBwcm9w ZXJ0eS0+YmFzZS5pZCwgcHJvcGVydHktPm5hbWUpOwo+IEBAIC04OSwxNSArOTMsMTggQEAgaW50 IGludGVsX2RpZ2l0YWxfY29ubmVjdG9yX2F0b21pY19zZXRfcHJvcGVydHkoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvciwKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHRvX2k5MTUoZGV2KTsKPiAgCXN0cnVjdCBpbnRlbF9kaWdpdGFsX2Nvbm5lY3Rvcl9zdGF0 ZSAqaW50ZWxfY29ubl9zdGF0ZSA9Cj4gIAkJdG9faW50ZWxfZGlnaXRhbF9jb25uZWN0b3Jfc3Rh dGUoc3RhdGUpOwo+ICsJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29ubmVjdG9yID0g dG9faW50ZWxfY29ubmVjdG9yKGNvbm5lY3Rvcik7Cj4gIAo+ICAJaWYgKHByb3BlcnR5ID09IGRl dl9wcml2LT5mb3JjZV9hdWRpb19wcm9wZXJ0eSkgewo+ICAJCWludGVsX2Nvbm5fc3RhdGUtPmZv cmNlX2F1ZGlvID0gdmFsOwo+ICAJCXJldHVybiAwOwo+IC0JfQo+IC0KPiAtCWlmIChwcm9wZXJ0 eSA9PSBkZXZfcHJpdi0+YnJvYWRjYXN0X3JnYl9wcm9wZXJ0eSkgewo+ICsJfSBlbHNlIGlmIChw cm9wZXJ0eSA9PSBkZXZfcHJpdi0+YnJvYWRjYXN0X3JnYl9wcm9wZXJ0eSkgewo+ICAJCWludGVs X2Nvbm5fc3RhdGUtPmJyb2FkY2FzdF9yZ2IgPSB2YWw7Cj4gIAkJcmV0dXJuIDA7Cj4gKwl9IGVs c2UgaWYgKHByb3BlcnR5ID09IGludGVsX2Nvbm5lY3Rvci0+cHJpdmFjeV9zY3JlZW5fcHJvcGVy dHkpIHsKPiArCQlpbnRlbF9wcml2YWN5X3NjcmVlbl9zZXRfdmFsKGludGVsX2Nvbm5lY3Rvciwg dmFsKTsKPiArCQlpbnRlbF9jb25uX3N0YXRlLT5wcml2YWN5X3NjcmVlbl9zdGF0dXMgPSB2YWw7 Cj4gKwkJcmV0dXJuIDA7Cj4gIAl9Cj4gIAo+ICAJRFJNX0RFQlVHX0FUT01JQygiVW5rbm93biBw cm9wZXJ0eSBbUFJPUDolZDolc11cbiIsCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfY29ubmVjdG9yLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNw bGF5L2ludGVsX2Nvbm5lY3Rvci5jCj4gaW5kZXggMzA4ZWM2MzIwN2VlLi4zY2NiZjUyYWVkZjkg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jb25uZWN0 b3IuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY29ubmVjdG9y LmMKPiBAQCAtMjgxLDMgKzI4MSwzOCBAQCBpbnRlbF9hdHRhY2hfY29sb3JzcGFjZV9wcm9wZXJ0 eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ICAJCWRybV9vYmplY3RfYXR0YWNo X3Byb3BlcnR5KCZjb25uZWN0b3ItPmJhc2UsCj4gIAkJCQkJICAgY29ubmVjdG9yLT5jb2xvcnNw YWNlX3Byb3BlcnR5LCAwKTsKPiAgfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcHJv cF9lbnVtX2xpc3QgcHJpdmFjeV9zY3JlZW5fZW51bVtdID0gewo+ICsJeyBQUklWQUNZX1NDUkVF Tl9ESVNBQkxFRCwgIkRpc2FibGVkIiB9LAo+ICsJeyBQUklWQUNZX1NDUkVFTl9FTkFCTEVELCAi RW5hYmxlZCIgfSwKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBpbnRlbF9hdHRhY2hfcHJpdmFjeV9z Y3JlZW5fcHJvcGVydHkgLQo+ICsgKiAgICAgY3JlYXRlIGFuZCBhdHRhY2ggdGhlIGNvbm5lY3Rl cidzIHByaXZhY3ktc2NyZWVuIHByb3BlcnR5LiAqCj4gKyAqIEBjb25uZWN0b3I6IGNvbm5lY3Rv ciBmb3Igd2hpY2ggdG8gaW5pdCB0aGUgcHJpdmFjeS1zY3JlZW4gcHJvcGVydHkKPiArICoKPiAr ICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGFuZCBhdHRhY2hlcyB0aGUgInByaXZhY3ktc2NyZWVu IiBwcm9wZXJ0eSB0byB0aGUKPiArICogY29ubmVjdG9yLiBJbml0aWFsIHN0YXRlIG9mIHByaXZh Y3ktc2NyZWVuIGlzIHNldCB0byBkaXNhYmxlZC4KPiArICovCj4gK3ZvaWQKPiAraW50ZWxfYXR0 YWNoX3ByaXZhY3lfc2NyZWVuX3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3RvciA9IHRv X2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwo+ICsJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJv cDsKPiArCj4gKwlpZiAoIWludGVsX2Nvbm5lY3Rvci0+cHJpdmFjeV9zY3JlZW5fcHJvcGVydHkp IHsKPiArCQlwcm9wID0gZHJtX3Byb3BlcnR5X2NyZWF0ZV9lbnVtKGNvbm5lY3Rvci0+ZGV2LAo+ ICsJCQkJCQlEUk1fTU9ERV9QUk9QX0VOVU0sCj4gKwkJCQkJCSJwcml2YWN5LXNjcmVlbiIsCj4g KwkJCQkJCXByaXZhY3lfc2NyZWVuX2VudW0sCj4gKwkJCQkJICAgIEFSUkFZX1NJWkUocHJpdmFj eV9zY3JlZW5fZW51bSkpOwo+ICsJCWlmICghcHJvcCkKPiArCQkJcmV0dXJuOwo+ICsKPiArCQlp bnRlbF9jb25uZWN0b3ItPnByaXZhY3lfc2NyZWVuX3Byb3BlcnR5ID0gcHJvcDsKPiArCX0KPiAr Cj4gKwlkcm1fb2JqZWN0X2F0dGFjaF9wcm9wZXJ0eSgmY29ubmVjdG9yLT5iYXNlLCBwcm9wLAo+ ICsJCQkJICAgUFJJVkFDWV9TQ1JFRU5fRElTQUJMRUQpOwo+ICt9CgpJIHRoaW5rIHRoaXMgc2hv dWxkIGJlIGEgZHJtIGNvcmUgbGV2ZWwgcHJvcGVydHkgaW4gZHJtX2Nvbm5lY3Rvci5bY2hdCnNv IHRoYXQgKmFsbCogZHJpdmVycyB3b3VsZCB1c2UgdGhlIHNhbWUgdGhpbmcgZm9yIHByaXZhY3kg c2NyZWVucy4gTm90Cmk5MTUgc3BlY2lmaWMuCgpJIHRoaW5rIHRoaXMgaXMgdGhlIGJpZ2dlc3Qg aXNzdWUgaW4gdGhlIHBhdGNoIHNlcmllcy4KCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfY29ubmVjdG9yLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2Nvbm5lY3Rvci5oCj4gaW5kZXggOTNhNzM3NWM4MTk2Li42MTAwNWYzN2Ez MzggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jb25u ZWN0b3IuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY29ubmVj dG9yLmgKPiBAQCAtMzEsNSArMzEsNiBAQCB2b2lkIGludGVsX2F0dGFjaF9mb3JjZV9hdWRpb19w cm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKPiAgdm9pZCBpbnRlbF9h dHRhY2hfYnJvYWRjYXN0X3JnYl9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yKTsKPiAgdm9pZCBpbnRlbF9hdHRhY2hfYXNwZWN0X3JhdGlvX3Byb3BlcnR5KHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwo+ICB2b2lkIGludGVsX2F0dGFjaF9jb2xvcnNwYWNl X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwo+ICt2b2lkIGludGVs X2F0dGFjaF9wcml2YWN5X3NjcmVlbl9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yKTsKPiAgCj4gICNlbmRpZiAvKiBfX0lOVEVMX0NPTk5FQ1RPUl9IX18gKi8KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVz LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaAo+ IGluZGV4IGMyNzA2YWZjMDY5Yi4uODNiOGM5ODA0OWE3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmgKPiBAQCAtNDI2LDYg KzQyNiw5IEBAIHN0cnVjdCBpbnRlbF9jb25uZWN0b3Igewo+ICAJc3RydWN0IHdvcmtfc3RydWN0 IG1vZGVzZXRfcmV0cnlfd29yazsKPiAgCj4gIAlzdHJ1Y3QgaW50ZWxfaGRjcCBoZGNwOwo+ICsK PiArCS8qIE9wdGlvbmFsICJwcml2YWN5LXNjcmVlbiIgcHJvcGVydHkgZm9yIHRoZSBjb25uZWN0 b3IgcGFuZWwgKi8KPiArCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByaXZhY3lfc2NyZWVuX3Byb3Bl cnR5Owo+ICB9Owo+ICAKPiAgc3RydWN0IGludGVsX2RpZ2l0YWxfY29ubmVjdG9yX3N0YXRlIHsK PiBAQCAtNDMzLDYgKzQzNiw3IEBAIHN0cnVjdCBpbnRlbF9kaWdpdGFsX2Nvbm5lY3Rvcl9zdGF0 ZSB7Cj4gIAo+ICAJZW51bSBoZG1pX2ZvcmNlX2F1ZGlvIGZvcmNlX2F1ZGlvOwo+ICAJaW50IGJy b2FkY2FzdF9yZ2I7Cj4gKwllbnVtIGludGVsX3ByaXZhY3lfc2NyZWVuX3N0YXR1cyBwcml2YWN5 X3NjcmVlbl9zdGF0dXM7Cj4gIH07Cj4gIAo+ICAjZGVmaW5lIHRvX2ludGVsX2RpZ2l0YWxfY29u bmVjdG9yX3N0YXRlKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9jb25u ZWN0b3Jfc3RhdGUsIGJhc2UpCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAu Ywo+IGluZGV4IDRmYWM0MDhhNDI5OS4uMTk2M2U5MjQwNGJhIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYwo+IEBAIC02Miw2ICs2Miw3IEBACj4gICNpbmNsdWRl ICJpbnRlbF9sc3Bjb24uaCIKPiAgI2luY2x1ZGUgImludGVsX2x2ZHMuaCIKPiAgI2luY2x1ZGUg ImludGVsX3BhbmVsLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9wcml2YWN5X3NjcmVlbi5oIgo+ICAj aW5jbHVkZSAiaW50ZWxfcHNyLmgiCj4gICNpbmNsdWRlICJpbnRlbF9zaWRlYmFuZC5oIgo+ICAj aW5jbHVkZSAiaW50ZWxfdGMuaCIKPiBAQCAtNjM1OCw2ICs2MzU5LDEwIEBAIGludGVsX2RwX2Fk ZF9wcm9wZXJ0aWVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0Cj4gIAo+ICAJCS8qIExvb2t1cCB0aGUgQUNQSSBub2RlIGNvcnJlc3BvbmRp bmcgdG8gdGhlIGNvbm5lY3RvciAqLwo+ICAJCWludGVsX2Nvbm5lY3Rvcl9sb29rdXBfYWNwaV9u b2RlKGludGVsX2Nvbm5lY3Rvcik7Cj4gKwo+ICsJCS8qIENoZWNrIGZvciBpbnRlZ3JhdGVkIFBy aXZhY3kgc2NyZWVuIHN1cHBvcnQgKi8KPiArCQlpZiAoaW50ZWxfcHJpdmFjeV9zY3JlZW5fcHJl c2VudChpbnRlbF9jb25uZWN0b3IpKQo+ICsJCQlpbnRlbF9hdHRhY2hfcHJpdmFjeV9zY3JlZW5f cHJvcGVydHkoY29ubmVjdG9yKTsKPiAgCX0KPiAgfQo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wcml2YWN5X3NjcmVlbi5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wcml2YWN5X3NjcmVlbi5jCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjRjNDIyZTM4YzUxYQo+IC0tLSAvZGV2L251 bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3ByaXZhY3lfc2Ny ZWVuLmMKPiBAQCAtMCwwICsxLDcwIEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wLW9yLWxhdGVyCgpQbGVhc2UgcmVhZCBodHRwOi8vbWlkLm1haWwtYXJjaGl2ZS5jb20v Q0FLTUs3dUgtOCt0YktzQW9pQ2hzeEVMRWNfNzdSVlZ4UDJ3YXBIV2hxQiswVmlpZm9nQG1haWwu Z21haWwuY29tCgo+ICsvKgo+ICsgKiBJbnRlbCBBQ1BJIHByaXZhY3kgc2NyZWVuIGNvZGUKPiAr ICoKPiArICogQ29weXJpZ2h0IMKpIDIwMTkgR29vZ2xlIEluYy4KPiArICovCj4gKwo+ICsjaW5j bHVkZSA8bGludXgvYWNwaS5oPgo+ICsKPiArI2luY2x1ZGUgImludGVsX3ByaXZhY3lfc2NyZWVu LmgiCj4gKwo+ICsjZGVmaW5lIENPTk5FQ1RPUl9EU01fUkVWSUQgMQo+ICsKPiArI2RlZmluZSBD T05ORUNUT1JfRFNNX0ZOX1BSSVZBQ1lfRU5BQkxFCQkyCj4gKyNkZWZpbmUgQ09OTkVDVE9SX0RT TV9GTl9QUklWQUNZX0RJU0FCTEUJCTMKPiArCj4gK3N0YXRpYyBjb25zdCBndWlkX3QgZHJtX2Nv bm5fZHNtX2d1aWQgPQo+ICsJR1VJRF9JTklUKDB4QzcwMzMxMTMsIDB4ODcyMCwgMHg0Q0VCLAo+ ICsJCSAgMHg5MCwgMHg5MCwgMHg5RCwgMHg1MiwgMHhCMywgMHhFNSwgMHgyRCwgMHg3Myk7Cj4g Kwo+ICsvKiBNYWtlcyBfRFNNIGNhbGwgdG8gc2V0IHByaXZhY3kgc2NyZWVuIHN0YXR1cyAqLwo+ ICtzdGF0aWMgdm9pZCBhY3BpX3ByaXZhY3lfc2NyZWVuX2NhbGxfZHNtKGFjcGlfaGFuZGxlIGNv bm5faGFuZGxlLCB1NjQgZnVuYykKPiArewo+ICsJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKPiAr Cj4gKwlvYmogPSBhY3BpX2V2YWx1YXRlX2RzbShjb25uX2hhbmRsZSwgJmRybV9jb25uX2RzbV9n dWlkLAo+ICsJCQkJQ09OTkVDVE9SX0RTTV9SRVZJRCwgZnVuYywgTlVMTCk7Cj4gKwlpZiAoIW9i aikgewo+ICsJCURSTV9ERUJVR19EUklWRVIoImZhaWxlZCB0byBldmFsdWF0ZSBfRFNNIGZvciBm biAlbGx4XG4iLCBmdW5jKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJQUNQSV9GUkVFKG9i aik7Cj4gK30KPiArCj4gK3ZvaWQgaW50ZWxfcHJpdmFjeV9zY3JlZW5fc2V0X3ZhbChzdHJ1Y3Qg aW50ZWxfY29ubmVjdG9yICppbnRlbF9jb25uZWN0b3IsCj4gKwkJCQkgIGVudW0gaW50ZWxfcHJp dmFjeV9zY3JlZW5fc3RhdHVzIHZhbCkKCkp1c3QgbmFtZSB0aGUgcGFyYW1ldGVyIGNvbm5lY3Rv ciwgbm90IGludGVsX2Nvbm5lY3Rvci4gVGhpcyB0aHJvdWdob3V0LgoKPiArewo+ICsJYWNwaV9o YW5kbGUgYWNwaV9oYW5kbGUgPSBpbnRlbF9jb25uZWN0b3ItPmFjcGlfaGFuZGxlOwo+ICsKPiAr CWlmICghYWNwaV9oYW5kbGUpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWlmICh2YWwgPT0gUFJJVkFD WV9TQ1JFRU5fRElTQUJMRUQpCj4gKwkJYWNwaV9wcml2YWN5X3NjcmVlbl9jYWxsX2RzbShhY3Bp X2hhbmRsZSwKPiArCQkJCQkgICAgIENPTk5FQ1RPUl9EU01fRk5fUFJJVkFDWV9ESVNBQkxFKTsK PiArCWVsc2UgaWYgKHZhbCA9PSBQUklWQUNZX1NDUkVFTl9FTkFCTEVEKQo+ICsJCWFjcGlfcHJp dmFjeV9zY3JlZW5fY2FsbF9kc20oYWNwaV9oYW5kbGUsCj4gKwkJCQkJICAgICBDT05ORUNUT1Jf RFNNX0ZOX1BSSVZBQ1lfRU5BQkxFKTsKCmVsc2UgY29tcGxhaW4/Cgo+ICt9Cj4gKwo+ICtib29s IGludGVsX3ByaXZhY3lfc2NyZWVuX3ByZXNlbnQoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50 ZWxfY29ubmVjdG9yKQo+ICt7Cj4gKwlhY3BpX2hhbmRsZSBoYW5kbGUgPSBpbnRlbF9jb25uZWN0 b3ItPmFjcGlfaGFuZGxlOwo+ICsKPiArCWlmICghaGFuZGxlKQo+ICsJCXJldHVybiBmYWxzZTsK PiArCj4gKwlpZiAoIWFjcGlfY2hlY2tfZHNtKGhhbmRsZSwgJmRybV9jb25uX2RzbV9ndWlkLAo+ ICsJCQkgICAgQ09OTkVDVE9SX0RTTV9SRVZJRCwKPiArCQkJICAgIDEgPDwgQ09OTkVDVE9SX0RT TV9GTl9QUklWQUNZX0VOQUJMRSB8Cj4gKwkJCSAgICAxIDw8IENPTk5FQ1RPUl9EU01fRk5fUFJJ VkFDWV9ESVNBQkxFKSkgewo+ICsJCURSTV9XQVJOKCIlczogT2RkLCBjb25uZWN0b3IgQUNQSSBu b2RlIGJ1dCBubyBwcml2YWN5IHNjcm4/XG4iLAo+ICsJCQkgZGV2X25hbWUoaW50ZWxfY29ubmVj dG9yLT5iYXNlLmRldi0+ZGV2KSk7Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ICsJRFJNX0RF Vl9JTkZPKGludGVsX2Nvbm5lY3Rvci0+YmFzZS5kZXYtPmRldiwKPiArCQkgICAgICJzdXBwb3J0 cyBwcml2YWN5IHNjcmVlblxuIik7Cj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3ByaXZhY3lfc2NyZWVuLmggYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3ByaXZhY3lfc2NyZWVuLmgKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMjEyZjczMzQ5YTAwCj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHJp dmFjeV9zY3JlZW4uaAo+IEBAIC0wLDAgKzEsMjUgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTkg R29vZ2xlIEluYy4KPiArICovCj4gKwo+ICsjaWZuZGVmIF9fRFJNX1BSSVZBQ1lfU0NSRUVOX0hf Xwo+ICsjZGVmaW5lIF9fRFJNX1BSSVZBQ1lfU0NSRUVOX0hfXwo+ICsKPiArI2luY2x1ZGUgImlu dGVsX2Rpc3BsYXlfdHlwZXMuaCIKPiArCj4gKyNpZmRlZiBDT05GSUdfQUNQSQo+ICtib29sIGlu dGVsX3ByaXZhY3lfc2NyZWVuX3ByZXNlbnQoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxf Y29ubmVjdG9yKTsKPiArdm9pZCBpbnRlbF9wcml2YWN5X3NjcmVlbl9zZXRfdmFsKHN0cnVjdCBp bnRlbF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3RvciwKPiArCQkJCSAgZW51bSBpbnRlbF9wcml2 YWN5X3NjcmVlbl9zdGF0dXMgdmFsKTsKPiArI2Vsc2UKPiArYm9vbCBpbnRlbF9wcml2YWN5X3Nj cmVlbl9wcmVzZW50KHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3Rvcik7Cj4g K3sKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICt2b2lkIGludGVsX3ByaXZhY3lfc2NyZWVuX3Nl dF92YWwoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29ubmVjdG9yLAo+ICsJCQkJICBl bnVtIGludGVsX3ByaXZhY3lfc2NyZWVuX3N0YXR1cyB2YWwpCj4gK3sgfQo+ICsjZW5kaWYgLyog Q09ORklHX0FDUEkgKi8KPiArCj4gKyNlbmRpZiAvKiBfX0RSTV9QUklWQUNZX1NDUkVFTl9IX18g Ki8KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oIGIvaW5jbHVkZS91 YXBpL2RybS9pOTE1X2RybS5oCj4gaW5kZXggNDY5ZGM1MTJjY2EzLi5jZjA4ZDU2MzYzNjMgMTAw NjQ0Cj4gLS0tIGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCj4gKysrIGIvaW5jbHVkZS91 YXBpL2RybS9pOTE1X2RybS5oCj4gQEAgLTIxMjMsNiArMjEyMywyMCBAQCBzdHJ1Y3QgZHJtX2k5 MTVfcXVlcnlfZW5naW5lX2luZm8gewo+ICAJc3RydWN0IGRybV9pOTE1X2VuZ2luZV9pbmZvIGVu Z2luZXNbXTsKPiAgfTsKPiAgCj4gKy8qKgo+ICsgKiBlbnVtIGludGVsX3ByaXZhY3lfc2NyZWVu X3N0YXR1cyAtIHByaXZhY3lfc2NyZWVuIHN0YXR1cwo+ICsgKgo+ICsgKiBUaGlzIGVudW0gaXMg dXNlZCB0byB0cmFjayBhbmQgY29udHJvbCB0aGUgc3RhdGUgb2YgdGhlIGludGVncmF0ZWQgcHJp dmFjeQo+ICsgKiBzY3JlZW4gcHJlc2VudCBvbiBzb21lIGRpc3BsYXkgcGFuZWxzLCB2aWEgdGhl ICJwcml2YWN5LXNjcmVlbiIgcHJvcGVydHkuCj4gKyAqCj4gKyAqIEBQUklWQUNZX1NDUkVFTl9E SVNBQkxFRDogVGhlIHByaXZhY3ktc2NyZWVuIG9uIHRoZSBwYW5lbCBpcyBkaXNhYmxlZAo+ICsg KiBAUFJJVkFDWV9TQ1JFRU5fRU5BQkxFRDogIFRoZSBwcml2YWN5LXNjcmVlbiBvbiB0aGUgcGFu ZWwgaXMgZW5hYmxlZAo+ICsgKiovCj4gK2VudW0gaW50ZWxfcHJpdmFjeV9zY3JlZW5fc3RhdHVz IHsKPiArCVBSSVZBQ1lfU0NSRUVOX0RJU0FCTEVEID0gMCwKPiArCVBSSVZBQ1lfU0NSRUVOX0VO QUJMRUQgPSAxLAo+ICt9Owo+ICsKClRoZSBkcm1fcHJvcGVydHkgaW50ZXJmYWNlIFVBUEkgaXMg YmFzZWQgb24gdGhlIHN0cmluZ3MsICpub3QqIG9uIHRoZQp2YWx1ZXMuIFBsZWFzZSBtb3ZlIHRo ZSBlbnVtIG91dCBvZiB1YXBpIGludG8gdGhlIGRybSBjb2RlLgoKQlIsCmphbmkuCgo+ICAjaWYg ZGVmaW5lZChfX2NwbHVzcGx1cykKPiAgfQo+ICAjZW5kaWYKCi0tIApKYW5pIE5pa3VsYSwgSW50 ZWwgT3BlbiBTb3VyY2UgR3JhcGhpY3MgQ2VudGVyCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ludGVsLWdmeA== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9AAB0C432C0 for ; Wed, 20 Nov 2019 15:04:35 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 630EA2089D for ; Wed, 20 Nov 2019 15:04:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729052AbfKTPEe convert rfc822-to-8bit (ORCPT ); Wed, 20 Nov 2019 10:04:34 -0500 Received: from mga04.intel.com ([192.55.52.120]:24440 "EHLO mga04.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727794AbfKTPEe (ORCPT ); Wed, 20 Nov 2019 10:04:34 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 Nov 2019 07:04:32 -0800 X-IronPort-AV: E=Sophos;i="5.69,222,1571727600"; d="scan'208";a="200744757" Received: from jnikula-mobl3.fi.intel.com (HELO localhost) ([10.237.66.161]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 Nov 2019 07:04:23 -0800 From: Jani Nikula To: Rajat Jain , Maarten Lankhorst , Maxime Ripard , Sean Paul , David Airlie , Daniel Vetter , Joonas Lahtinen , Rodrigo Vivi , Ville =?utf-8?B?U3lyasOkbMOk?= , Chris Wilson , Imre Deak , =?utf-8?Q?Jos=C3=A9?= Roberto de Souza , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, gregkh@linuxfoundation.org, mathewk@google.com, Daniel Thompson , Jonathan Corbet , Pavel Machek , seanpaul@google.com, Duncan Laurie , jsbarnes@google.com, Thierry Reding Cc: Rajat Jain , rajatxjain@gmail.com Subject: Re: [PATCH v2 3/3] drm/i915: Add support for integrated privacy screens In-Reply-To: <20191104194147.185642-3-rajatja@google.com> Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo References: <20191023001206.15741-1-rajatja@google.com> <20191104194147.185642-1-rajatja@google.com> <20191104194147.185642-3-rajatja@google.com> Date: Wed, 20 Nov 2019 17:04:20 +0200 Message-ID: <87r222wpvv.fsf@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 04 Nov 2019, Rajat Jain wrote: > Certain laptops now come with panels that have integrated privacy > screens on them. This patch adds support for such panels by adding > a privacy-screen property to the intel_connector for the panel, that > the userspace can then use to control and check the status. > > Identifying the presence of privacy screen, and controlling it, is done > via ACPI _DSM methods. > > Currently, this is done only for the Intel display ports. But in future, > this can be done for any other ports if the hardware becomes available > (e.g. external monitors supporting integrated privacy screens?). > > Signed-off-by: Rajat Jain > Change-Id: Ic9ff07fc4a50797d2d0dfb919f11aa0821a4b548 > --- > v2: Formed by splitting the original patch into multiple patches. > - All code has been moved into i915 now. > - Privacy screen is a i915 property > - Have a local state variable to store the prvacy screen. Don't read > it from hardware. > > drivers/gpu/drm/i915/Makefile | 3 +- > drivers/gpu/drm/i915/display/intel_atomic.c | 13 +++- > .../gpu/drm/i915/display/intel_connector.c | 35 ++++++++++ > .../gpu/drm/i915/display/intel_connector.h | 1 + > .../drm/i915/display/intel_display_types.h | 4 ++ > drivers/gpu/drm/i915/display/intel_dp.c | 5 ++ > .../drm/i915/display/intel_privacy_screen.c | 70 +++++++++++++++++++ > .../drm/i915/display/intel_privacy_screen.h | 25 +++++++ > include/uapi/drm/i915_drm.h | 14 ++++ > 9 files changed, 166 insertions(+), 4 deletions(-) > create mode 100644 drivers/gpu/drm/i915/display/intel_privacy_screen.c > create mode 100644 drivers/gpu/drm/i915/display/intel_privacy_screen.h > > diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile > index 2587ea834f06..3589ebcf27bc 100644 > --- a/drivers/gpu/drm/i915/Makefile > +++ b/drivers/gpu/drm/i915/Makefile > @@ -185,7 +185,8 @@ i915-y += \ > display/intel_tc.o > i915-$(CONFIG_ACPI) += \ > display/intel_acpi.o \ > - display/intel_opregion.o > + display/intel_opregion.o \ > + display/intel_privacy_screen.o Mmmh, wonder if there'll be non-ACPI based privacy screens. I guess we can sort this out then. *shrug* > i915-$(CONFIG_DRM_FBDEV_EMULATION) += \ > display/intel_fbdev.o > > diff --git a/drivers/gpu/drm/i915/display/intel_atomic.c b/drivers/gpu/drm/i915/display/intel_atomic.c > index d3fb75bb9eb1..378772d3449c 100644 > --- a/drivers/gpu/drm/i915/display/intel_atomic.c > +++ b/drivers/gpu/drm/i915/display/intel_atomic.c > @@ -37,6 +37,7 @@ > #include "intel_atomic.h" > #include "intel_display_types.h" > #include "intel_hdcp.h" > +#include "intel_privacy_screen.h" > #include "intel_sprite.h" > > /** > @@ -57,11 +58,14 @@ int intel_digital_connector_atomic_get_property(struct drm_connector *connector, > struct drm_i915_private *dev_priv = to_i915(dev); > struct intel_digital_connector_state *intel_conn_state = > to_intel_digital_connector_state(state); > + struct intel_connector *intel_connector = to_intel_connector(connector); > > if (property == dev_priv->force_audio_property) > *val = intel_conn_state->force_audio; > else if (property == dev_priv->broadcast_rgb_property) > *val = intel_conn_state->broadcast_rgb; > + else if (property == intel_connector->privacy_screen_property) > + *val = intel_conn_state->privacy_screen_status; > else { > DRM_DEBUG_ATOMIC("Unknown property [PROP:%d:%s]\n", > property->base.id, property->name); > @@ -89,15 +93,18 @@ int intel_digital_connector_atomic_set_property(struct drm_connector *connector, > struct drm_i915_private *dev_priv = to_i915(dev); > struct intel_digital_connector_state *intel_conn_state = > to_intel_digital_connector_state(state); > + struct intel_connector *intel_connector = to_intel_connector(connector); > > if (property == dev_priv->force_audio_property) { > intel_conn_state->force_audio = val; > return 0; > - } > - > - if (property == dev_priv->broadcast_rgb_property) { > + } else if (property == dev_priv->broadcast_rgb_property) { > intel_conn_state->broadcast_rgb = val; > return 0; > + } else if (property == intel_connector->privacy_screen_property) { > + intel_privacy_screen_set_val(intel_connector, val); > + intel_conn_state->privacy_screen_status = val; > + return 0; > } > > DRM_DEBUG_ATOMIC("Unknown property [PROP:%d:%s]\n", > diff --git a/drivers/gpu/drm/i915/display/intel_connector.c b/drivers/gpu/drm/i915/display/intel_connector.c > index 308ec63207ee..3ccbf52aedf9 100644 > --- a/drivers/gpu/drm/i915/display/intel_connector.c > +++ b/drivers/gpu/drm/i915/display/intel_connector.c > @@ -281,3 +281,38 @@ intel_attach_colorspace_property(struct drm_connector *connector) > drm_object_attach_property(&connector->base, > connector->colorspace_property, 0); > } > + > +static const struct drm_prop_enum_list privacy_screen_enum[] = { > + { PRIVACY_SCREEN_DISABLED, "Disabled" }, > + { PRIVACY_SCREEN_ENABLED, "Enabled" }, > +}; > + > +/** > + * intel_attach_privacy_screen_property - > + * create and attach the connecter's privacy-screen property. * > + * @connector: connector for which to init the privacy-screen property > + * > + * This function creates and attaches the "privacy-screen" property to the > + * connector. Initial state of privacy-screen is set to disabled. > + */ > +void > +intel_attach_privacy_screen_property(struct drm_connector *connector) > +{ > + struct intel_connector *intel_connector = to_intel_connector(connector); > + struct drm_property *prop; > + > + if (!intel_connector->privacy_screen_property) { > + prop = drm_property_create_enum(connector->dev, > + DRM_MODE_PROP_ENUM, > + "privacy-screen", > + privacy_screen_enum, > + ARRAY_SIZE(privacy_screen_enum)); > + if (!prop) > + return; > + > + intel_connector->privacy_screen_property = prop; > + } > + > + drm_object_attach_property(&connector->base, prop, > + PRIVACY_SCREEN_DISABLED); > +} I think this should be a drm core level property in drm_connector.[ch] so that *all* drivers would use the same thing for privacy screens. Not i915 specific. I think this is the biggest issue in the patch series. > diff --git a/drivers/gpu/drm/i915/display/intel_connector.h b/drivers/gpu/drm/i915/display/intel_connector.h > index 93a7375c8196..61005f37a338 100644 > --- a/drivers/gpu/drm/i915/display/intel_connector.h > +++ b/drivers/gpu/drm/i915/display/intel_connector.h > @@ -31,5 +31,6 @@ void intel_attach_force_audio_property(struct drm_connector *connector); > void intel_attach_broadcast_rgb_property(struct drm_connector *connector); > void intel_attach_aspect_ratio_property(struct drm_connector *connector); > void intel_attach_colorspace_property(struct drm_connector *connector); > +void intel_attach_privacy_screen_property(struct drm_connector *connector); > > #endif /* __INTEL_CONNECTOR_H__ */ > diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h > index c2706afc069b..83b8c98049a7 100644 > --- a/drivers/gpu/drm/i915/display/intel_display_types.h > +++ b/drivers/gpu/drm/i915/display/intel_display_types.h > @@ -426,6 +426,9 @@ struct intel_connector { > struct work_struct modeset_retry_work; > > struct intel_hdcp hdcp; > + > + /* Optional "privacy-screen" property for the connector panel */ > + struct drm_property *privacy_screen_property; > }; > > struct intel_digital_connector_state { > @@ -433,6 +436,7 @@ struct intel_digital_connector_state { > > enum hdmi_force_audio force_audio; > int broadcast_rgb; > + enum intel_privacy_screen_status privacy_screen_status; > }; > > #define to_intel_digital_connector_state(x) container_of(x, struct intel_digital_connector_state, base) > diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c > index 4fac408a4299..1963e92404ba 100644 > --- a/drivers/gpu/drm/i915/display/intel_dp.c > +++ b/drivers/gpu/drm/i915/display/intel_dp.c > @@ -62,6 +62,7 @@ > #include "intel_lspcon.h" > #include "intel_lvds.h" > #include "intel_panel.h" > +#include "intel_privacy_screen.h" > #include "intel_psr.h" > #include "intel_sideband.h" > #include "intel_tc.h" > @@ -6358,6 +6359,10 @@ intel_dp_add_properties(struct intel_dp *intel_dp, struct drm_connector *connect > > /* Lookup the ACPI node corresponding to the connector */ > intel_connector_lookup_acpi_node(intel_connector); > + > + /* Check for integrated Privacy screen support */ > + if (intel_privacy_screen_present(intel_connector)) > + intel_attach_privacy_screen_property(connector); > } > } > > diff --git a/drivers/gpu/drm/i915/display/intel_privacy_screen.c b/drivers/gpu/drm/i915/display/intel_privacy_screen.c > new file mode 100644 > index 000000000000..4c422e38c51a > --- /dev/null > +++ b/drivers/gpu/drm/i915/display/intel_privacy_screen.c > @@ -0,0 +1,70 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later Please read http://mid.mail-archive.com/CAKMK7uH-8+tbKsAoiChsxELEc_77RVVxP2wapHWhqB+0Viifog@mail.gmail.com > +/* > + * Intel ACPI privacy screen code > + * > + * Copyright © 2019 Google Inc. > + */ > + > +#include > + > +#include "intel_privacy_screen.h" > + > +#define CONNECTOR_DSM_REVID 1 > + > +#define CONNECTOR_DSM_FN_PRIVACY_ENABLE 2 > +#define CONNECTOR_DSM_FN_PRIVACY_DISABLE 3 > + > +static const guid_t drm_conn_dsm_guid = > + GUID_INIT(0xC7033113, 0x8720, 0x4CEB, > + 0x90, 0x90, 0x9D, 0x52, 0xB3, 0xE5, 0x2D, 0x73); > + > +/* Makes _DSM call to set privacy screen status */ > +static void acpi_privacy_screen_call_dsm(acpi_handle conn_handle, u64 func) > +{ > + union acpi_object *obj; > + > + obj = acpi_evaluate_dsm(conn_handle, &drm_conn_dsm_guid, > + CONNECTOR_DSM_REVID, func, NULL); > + if (!obj) { > + DRM_DEBUG_DRIVER("failed to evaluate _DSM for fn %llx\n", func); > + return; > + } > + > + ACPI_FREE(obj); > +} > + > +void intel_privacy_screen_set_val(struct intel_connector *intel_connector, > + enum intel_privacy_screen_status val) Just name the parameter connector, not intel_connector. This throughout. > +{ > + acpi_handle acpi_handle = intel_connector->acpi_handle; > + > + if (!acpi_handle) > + return; > + > + if (val == PRIVACY_SCREEN_DISABLED) > + acpi_privacy_screen_call_dsm(acpi_handle, > + CONNECTOR_DSM_FN_PRIVACY_DISABLE); > + else if (val == PRIVACY_SCREEN_ENABLED) > + acpi_privacy_screen_call_dsm(acpi_handle, > + CONNECTOR_DSM_FN_PRIVACY_ENABLE); else complain? > +} > + > +bool intel_privacy_screen_present(struct intel_connector *intel_connector) > +{ > + acpi_handle handle = intel_connector->acpi_handle; > + > + if (!handle) > + return false; > + > + if (!acpi_check_dsm(handle, &drm_conn_dsm_guid, > + CONNECTOR_DSM_REVID, > + 1 << CONNECTOR_DSM_FN_PRIVACY_ENABLE | > + 1 << CONNECTOR_DSM_FN_PRIVACY_DISABLE)) { > + DRM_WARN("%s: Odd, connector ACPI node but no privacy scrn?\n", > + dev_name(intel_connector->base.dev->dev)); > + return false; > + } > + DRM_DEV_INFO(intel_connector->base.dev->dev, > + "supports privacy screen\n"); > + return true; > +} > diff --git a/drivers/gpu/drm/i915/display/intel_privacy_screen.h b/drivers/gpu/drm/i915/display/intel_privacy_screen.h > new file mode 100644 > index 000000000000..212f73349a00 > --- /dev/null > +++ b/drivers/gpu/drm/i915/display/intel_privacy_screen.h > @@ -0,0 +1,25 @@ > +/* SPDX-License-Identifier: GPL-2.0-or-later */ > +/* > + * Copyright © 2019 Google Inc. > + */ > + > +#ifndef __DRM_PRIVACY_SCREEN_H__ > +#define __DRM_PRIVACY_SCREEN_H__ > + > +#include "intel_display_types.h" > + > +#ifdef CONFIG_ACPI > +bool intel_privacy_screen_present(struct intel_connector *intel_connector); > +void intel_privacy_screen_set_val(struct intel_connector *intel_connector, > + enum intel_privacy_screen_status val); > +#else > +bool intel_privacy_screen_present(struct intel_connector *intel_connector); > +{ > + return false; > +} > +void intel_privacy_screen_set_val(struct intel_connector *intel_connector, > + enum intel_privacy_screen_status val) > +{ } > +#endif /* CONFIG_ACPI */ > + > +#endif /* __DRM_PRIVACY_SCREEN_H__ */ > diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h > index 469dc512cca3..cf08d5636363 100644 > --- a/include/uapi/drm/i915_drm.h > +++ b/include/uapi/drm/i915_drm.h > @@ -2123,6 +2123,20 @@ struct drm_i915_query_engine_info { > struct drm_i915_engine_info engines[]; > }; > > +/** > + * enum intel_privacy_screen_status - privacy_screen status > + * > + * This enum is used to track and control the state of the integrated privacy > + * screen present on some display panels, via the "privacy-screen" property. > + * > + * @PRIVACY_SCREEN_DISABLED: The privacy-screen on the panel is disabled > + * @PRIVACY_SCREEN_ENABLED: The privacy-screen on the panel is enabled > + **/ > +enum intel_privacy_screen_status { > + PRIVACY_SCREEN_DISABLED = 0, > + PRIVACY_SCREEN_ENABLED = 1, > +}; > + The drm_property interface UAPI is based on the strings, *not* on the values. Please move the enum out of uapi into the drm code. BR, jani. > #if defined(__cplusplus) > } > #endif -- Jani Nikula, Intel Open Source Graphics Center