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=-17.4 required=3.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT, USER_IN_DEF_DKIM_WL 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 9075ECA9ED3 for ; Mon, 4 Nov 2019 19:42:03 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 560DA2067D for ; Mon, 4 Nov 2019 19:42:03 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="Awwva4OY" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728974AbfKDTmC (ORCPT ); Mon, 4 Nov 2019 14:42:02 -0500 Received: from mail-pf1-f202.google.com ([209.85.210.202]:50726 "EHLO mail-pf1-f202.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728741AbfKDTmA (ORCPT ); Mon, 4 Nov 2019 14:42:00 -0500 Received: by mail-pf1-f202.google.com with SMTP id e13so7564041pff.17 for ; Mon, 04 Nov 2019 11:41:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc:content-transfer-encoding; bh=YdVyYg2TmQWu6y8ro0turwBGFf90uoYSpY3DT2vX64s=; b=Awwva4OYZqsgvr4XB0eagEQnkESDAGDOveuMyxA3WOUz8UuvUMXNsmfJCxw8C+D15U Y/RcQc3ZcVijXTQNWz8uaJkOx28iDKZscO1fFDaC/dcGcUmHyXv57TEAHJq8C/j7JdAN bbR0ylU4f9XtuKy5n5bJttu2tNFrg4HBVhvgX6HHmoyxkJhwlWkJpioZxTnKvp9auQoM +HGUS96U5pkKVyfB4aHsK3hCVeRM3xkjLZOHMI1nhB8Cm9KlDxsB3c3ZeEK/xn1Jckzf Jgjx+gzf+ZnzOmcXUFx2tKvBiA564FXEaZHx+QpG/kPWTNjkxeCBpx1GgIFjW5uNPB1u yKkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc:content-transfer-encoding; bh=YdVyYg2TmQWu6y8ro0turwBGFf90uoYSpY3DT2vX64s=; b=eQFyQRR1msUlj6eHYCxMC0GIfiAoRSgTytDtXviIaJsC2VQ0MAAHNZS7yA7xr0vpQb 0g8DBCa+qR10bpclUv0tEO7NSgtkuBl6GvcWVdB5kUXUKYVZYsISIMLDkUDRFiP562S5 J7OzAZ5LzLZfMt5WyWWsYe0Xb2cP3HT95PIz1bpEqsVZCZID999phl1Bnof+H3b6hFZy be/212B3limj7SXph9Y2kbvcz6mfaK7bUTFn+kkVAgy8nIBlnrWGgcDDn+Il8Tx5trA9 rzutIaN1xTLWpYLMu+FyZKIN8eN8c5ZnEydZ3P/ooKXgXVvVNYZS96uPhHmLcL/YuwKj TecQ== X-Gm-Message-State: APjAAAUORZmt0IoMHfU3G1fubt9bgnhXwGYR3Ajqp8wqnGpTihaEj9hj gddwKar7ev96UWgxHW2XFwK+FpnPUQcf X-Google-Smtp-Source: APXvYqzWIBzt1JHFt6ogpAZ9xhFDdJOaQRMhLHY3DaK6aSnDATwEYqL9Z+ZpYF7w/1SgRgoQeZ4Pv0z/pePe X-Received: by 2002:a63:1a5e:: with SMTP id a30mr27305343pgm.299.1572896517733; Mon, 04 Nov 2019 11:41:57 -0800 (PST) Date: Mon, 4 Nov 2019 11:41:47 -0800 In-Reply-To: <20191104194147.185642-1-rajatja@google.com> Message-Id: <20191104194147.185642-3-rajatja@google.com> Mime-Version: 1.0 References: <20191023001206.15741-1-rajatja@google.com> <20191104194147.185642-1-rajatja@google.com> X-Mailer: git-send-email 2.24.0.rc1.363.gb1bccd3e3d-goog Subject: [PATCH v2 3/3] drm/i915: Add support for integrated privacy screens From: Rajat Jain To: Maarten Lankhorst , Maxime Ripard , Sean Paul , David Airlie , Daniel Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , "=?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?=" , Chris Wilson , Imre Deak , "=?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?=" , 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 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 +=3D \ display/intel_tc.o i915-$(CONFIG_ACPI) +=3D \ display/intel_acpi.o \ - display/intel_opregion.o + display/intel_opregion.o \ + display/intel_privacy_screen.o i915-$(CONFIG_DRM_FBDEV_EMULATION) +=3D \ display/intel_fbdev.o =20 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" =20 /** @@ -57,11 +58,14 @@ int intel_digital_connector_atomic_get_property(struct = drm_connector *connector, struct drm_i915_private *dev_priv =3D to_i915(dev); struct intel_digital_connector_state *intel_conn_state =3D to_intel_digital_connector_state(state); + struct intel_connector *intel_connector =3D to_intel_connector(connector)= ; =20 if (property =3D=3D dev_priv->force_audio_property) *val =3D intel_conn_state->force_audio; else if (property =3D=3D dev_priv->broadcast_rgb_property) *val =3D intel_conn_state->broadcast_rgb; + else if (property =3D=3D intel_connector->privacy_screen_property) + *val =3D 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 =3D to_i915(dev); struct intel_digital_connector_state *intel_conn_state =3D to_intel_digital_connector_state(state); + struct intel_connector *intel_connector =3D to_intel_connector(connector)= ; =20 if (property =3D=3D dev_priv->force_audio_property) { intel_conn_state->force_audio =3D val; return 0; - } - - if (property =3D=3D dev_priv->broadcast_rgb_property) { + } else if (property =3D=3D dev_priv->broadcast_rgb_property) { intel_conn_state->broadcast_rgb =3D val; return 0; + } else if (property =3D=3D intel_connector->privacy_screen_property) { + intel_privacy_screen_set_val(intel_connector, val); + intel_conn_state->privacy_screen_status =3D val; + return 0; } =20 DRM_DEBUG_ATOMIC("Unknown property [PROP:%d:%s]\n", diff --git a/drivers/gpu/drm/i915/display/intel_connector.c b/drivers/gpu/d= rm/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[] =3D { + { 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 =3D to_intel_connector(connector)= ; + struct drm_property *prop; + + if (!intel_connector->privacy_screen_property) { + prop =3D 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 =3D prop; + } + + drm_object_attach_property(&connector->base, prop, + PRIVACY_SCREEN_DISABLED); +} diff --git a/drivers/gpu/drm/i915/display/intel_connector.h b/drivers/gpu/d= rm/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_connect= or *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)= ; =20 #endif /* __INTEL_CONNECTOR_H__ */ diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/g= pu/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; =20 struct intel_hdcp hdcp; + + /* Optional "privacy-screen" property for the connector panel */ + struct drm_property *privacy_screen_property; }; =20 struct intel_digital_connector_state { @@ -433,6 +436,7 @@ struct intel_digital_connector_state { =20 enum hdmi_force_audio force_audio; int broadcast_rgb; + enum intel_privacy_screen_status privacy_screen_status; }; =20 #define to_intel_digital_connector_state(x) container_of(x, struct intel_d= igital_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, s= truct drm_connector *connect =20 /* 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); } } =20 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 +/* + * Intel ACPI privacy screen code + * + * Copyright =C2=A9 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 =3D + 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 =3D 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) +{ + acpi_handle acpi_handle =3D intel_connector->acpi_handle; + + if (!acpi_handle) + return; + + if (val =3D=3D PRIVACY_SCREEN_DISABLED) + acpi_privacy_screen_call_dsm(acpi_handle, + CONNECTOR_DSM_FN_PRIVACY_DISABLE); + else if (val =3D=3D PRIVACY_SCREEN_ENABLED) + acpi_privacy_screen_call_dsm(acpi_handle, + CONNECTOR_DSM_FN_PRIVACY_ENABLE); +} + +bool intel_privacy_screen_present(struct intel_connector *intel_connector) +{ + acpi_handle handle =3D 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 =C2=A9 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[]; }; =20 +/** + * enum intel_privacy_screen_status - privacy_screen status + * + * This enum is used to track and control the state of the integrated priv= acy + * screen present on some display panels, via the "privacy-screen" propert= y. + * + * @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 =3D 0, + PRIVACY_SCREEN_ENABLED =3D 1, +}; + #if defined(__cplusplus) } #endif --=20 2.24.0.rc1.363.gb1bccd3e3d-goog From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rajat Jain Subject: [PATCH v2 3/3] drm/i915: Add support for integrated privacy screens Date: Mon, 4 Nov 2019 11:41:47 -0800 Message-ID: <20191104194147.185642-3-rajatja@google.com> References: <20191023001206.15741-1-rajatja@google.com> <20191104194147.185642-1-rajatja@google.com> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: <20191104194147.185642-1-rajatja@google.com> Sender: linux-kernel-owner@vger.kernel.org To: Maarten Lankhorst , Maxime Ripard , Sean Paul , David Airlie , Daniel Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Chris Wilson , Imre Deak , =?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?= , 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 Cc: Rajat Jain , rajatxjain@gmail.com List-Id: dri-devel@lists.freedesktop.org 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 +=3D \ display/intel_tc.o i915-$(CONFIG_ACPI) +=3D \ display/intel_acpi.o \ - display/intel_opregion.o + display/intel_opregion.o \ + display/intel_privacy_screen.o i915-$(CONFIG_DRM_FBDEV_EMULATION) +=3D \ display/intel_fbdev.o =20 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" =20 /** @@ -57,11 +58,14 @@ int intel_digital_connector_atomic_get_property(struct = drm_connector *connector, struct drm_i915_private *dev_priv =3D to_i915(dev); struct intel_digital_connector_state *intel_conn_state =3D to_intel_digital_connector_state(state); + struct intel_connector *intel_connector =3D to_intel_connector(connector)= ; =20 if (property =3D=3D dev_priv->force_audio_property) *val =3D intel_conn_state->force_audio; else if (property =3D=3D dev_priv->broadcast_rgb_property) *val =3D intel_conn_state->broadcast_rgb; + else if (property =3D=3D intel_connector->privacy_screen_property) + *val =3D 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 =3D to_i915(dev); struct intel_digital_connector_state *intel_conn_state =3D to_intel_digital_connector_state(state); + struct intel_connector *intel_connector =3D to_intel_connector(connector)= ; =20 if (property =3D=3D dev_priv->force_audio_property) { intel_conn_state->force_audio =3D val; return 0; - } - - if (property =3D=3D dev_priv->broadcast_rgb_property) { + } else if (property =3D=3D dev_priv->broadcast_rgb_property) { intel_conn_state->broadcast_rgb =3D val; return 0; + } else if (property =3D=3D intel_connector->privacy_screen_property) { + intel_privacy_screen_set_val(intel_connector, val); + intel_conn_state->privacy_screen_status =3D val; + return 0; } =20 DRM_DEBUG_ATOMIC("Unknown property [PROP:%d:%s]\n", diff --git a/drivers/gpu/drm/i915/display/intel_connector.c b/drivers/gpu/d= rm/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[] =3D { + { 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 =3D to_intel_connector(connector)= ; + struct drm_property *prop; + + if (!intel_connector->privacy_screen_property) { + prop =3D 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 =3D prop; + } + + drm_object_attach_property(&connector->base, prop, + PRIVACY_SCREEN_DISABLED); +} diff --git a/drivers/gpu/drm/i915/display/intel_connector.h b/drivers/gpu/d= rm/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_connect= or *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)= ; =20 #endif /* __INTEL_CONNECTOR_H__ */ diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/g= pu/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; =20 struct intel_hdcp hdcp; + + /* Optional "privacy-screen" property for the connector panel */ + struct drm_property *privacy_screen_property; }; =20 struct intel_digital_connector_state { @@ -433,6 +436,7 @@ struct intel_digital_connector_state { =20 enum hdmi_force_audio force_audio; int broadcast_rgb; + enum intel_privacy_screen_status privacy_screen_status; }; =20 #define to_intel_digital_connector_state(x) container_of(x, struct intel_d= igital_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, s= truct drm_connector *connect =20 /* 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); } } =20 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 +/* + * Intel ACPI privacy screen code + * + * Copyright =C2=A9 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 =3D + 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 =3D 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) +{ + acpi_handle acpi_handle =3D intel_connector->acpi_handle; + + if (!acpi_handle) + return; + + if (val =3D=3D PRIVACY_SCREEN_DISABLED) + acpi_privacy_screen_call_dsm(acpi_handle, + CONNECTOR_DSM_FN_PRIVACY_DISABLE); + else if (val =3D=3D PRIVACY_SCREEN_ENABLED) + acpi_privacy_screen_call_dsm(acpi_handle, + CONNECTOR_DSM_FN_PRIVACY_ENABLE); +} + +bool intel_privacy_screen_present(struct intel_connector *intel_connector) +{ + acpi_handle handle =3D 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 =C2=A9 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[]; }; =20 +/** + * enum intel_privacy_screen_status - privacy_screen status + * + * This enum is used to track and control the state of the integrated priv= acy + * screen present on some display panels, via the "privacy-screen" propert= y. + * + * @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 =3D 0, + PRIVACY_SCREEN_ENABLED =3D 1, +}; + #if defined(__cplusplus) } #endif --=20 2.24.0.rc1.363.gb1bccd3e3d-goog 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=-9.7 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT 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 DED64C17476 for ; Tue, 5 Nov 2019 13:29:17 +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 C01542190F for ; Tue, 5 Nov 2019 13:29:17 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C01542190F Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.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 693136EA50; Tue, 5 Nov 2019 13:29:08 +0000 (UTC) Received: from mail-pf1-x44a.google.com (mail-pf1-x44a.google.com [IPv6:2607:f8b0:4864:20::44a]) by gabe.freedesktop.org (Postfix) with ESMTPS id B9AE989BB0 for ; Mon, 4 Nov 2019 19:41:58 +0000 (UTC) Received: by mail-pf1-x44a.google.com with SMTP id w16so3003912pfq.14 for ; Mon, 04 Nov 2019 11:41:58 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc:content-transfer-encoding; bh=YdVyYg2TmQWu6y8ro0turwBGFf90uoYSpY3DT2vX64s=; b=a+q36HqRQLtyt9PXnVox9aWBE+M1zHp/kRv7F6D1h29a3yISp7y3nuZnnysZ7XwPpz WCSPOMHXfEjO5vC0boryWvXuZz28aALaZVJZq1/C94wEhV1t3mpyQl6E9WdA3PI0PMSI gCK7PuEY+n1NeV7RHRAeUEsi6SEtzTMzyJx1/0MHsjhib2QxPBO/Ga6YnulDVS3nMccb t7adEOr9yfGmvzUgcnWgtPVBWmuzTpFywFXTpsUOiDTA1+jCU+BfniE/kFmvBjJuul7H 4iTj62rfw+R/hsVuR0oKhgq2Knqhs418VDkKosgVwzn6H0qOG/jLE2sV8kU3XBvpQ8xr 0hKQ== X-Gm-Message-State: APjAAAXQy2sD4WdokE5jNGOvuAYMheLM5CMn8kyevp4AdBFScRn+TkZy zd3Xv+PW/ZvJWULkzKdClikBGdR8OJPz X-Google-Smtp-Source: APXvYqzWIBzt1JHFt6ogpAZ9xhFDdJOaQRMhLHY3DaK6aSnDATwEYqL9Z+ZpYF7w/1SgRgoQeZ4Pv0z/pePe X-Received: by 2002:a63:1a5e:: with SMTP id a30mr27305343pgm.299.1572896517733; Mon, 04 Nov 2019 11:41:57 -0800 (PST) Date: Mon, 4 Nov 2019 11:41:47 -0800 In-Reply-To: <20191104194147.185642-1-rajatja@google.com> Message-Id: <20191104194147.185642-3-rajatja@google.com> Mime-Version: 1.0 References: <20191023001206.15741-1-rajatja@google.com> <20191104194147.185642-1-rajatja@google.com> X-Mailer: git-send-email 2.24.0.rc1.363.gb1bccd3e3d-goog Subject: [PATCH v2 3/3] drm/i915: Add support for integrated privacy screens From: Rajat Jain To: Maarten Lankhorst , Maxime Ripard , Sean Paul , David Airlie , Daniel Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , "=?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?=" , Chris Wilson , Imre Deak , "=?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?=" , 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 X-Mailman-Approved-At: Tue, 05 Nov 2019 13:29:07 +0000 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc:content-transfer-encoding; bh=YdVyYg2TmQWu6y8ro0turwBGFf90uoYSpY3DT2vX64s=; b=Awwva4OYZqsgvr4XB0eagEQnkESDAGDOveuMyxA3WOUz8UuvUMXNsmfJCxw8C+D15U Y/RcQc3ZcVijXTQNWz8uaJkOx28iDKZscO1fFDaC/dcGcUmHyXv57TEAHJq8C/j7JdAN bbR0ylU4f9XtuKy5n5bJttu2tNFrg4HBVhvgX6HHmoyxkJhwlWkJpioZxTnKvp9auQoM +HGUS96U5pkKVyfB4aHsK3hCVeRM3xkjLZOHMI1nhB8Cm9KlDxsB3c3ZeEK/xn1Jckzf Jgjx+gzf+ZnzOmcXUFx2tKvBiA564FXEaZHx+QpG/kPWTNjkxeCBpx1GgIFjW5uNPB1u yKkw== 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: <20191104194147.Unv0uN28_2kdAMUoGob2dybINpFPzt6K3gm8gxvurvU@z> Q2VydGFpbiBsYXB0b3BzIG5vdyBjb21lIHdpdGggcGFuZWxzIHRoYXQgaGF2ZSBpbnRlZ3JhdGVk IHByaXZhY3kKc2NyZWVucyBvbiB0aGVtLiBUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc3Vj aCBwYW5lbHMgYnkgYWRkaW5nCmEgcHJpdmFjeS1zY3JlZW4gcHJvcGVydHkgdG8gdGhlIGludGVs X2Nvbm5lY3RvciBmb3IgdGhlIHBhbmVsLCB0aGF0CnRoZSB1c2Vyc3BhY2UgY2FuIHRoZW4gdXNl IHRvIGNvbnRyb2wgYW5kIGNoZWNrIHRoZSBzdGF0dXMuCgpJZGVudGlmeWluZyB0aGUgcHJlc2Vu Y2Ugb2YgcHJpdmFjeSBzY3JlZW4sIGFuZCBjb250cm9sbGluZyBpdCwgaXMgZG9uZQp2aWEgQUNQ SSBfRFNNIG1ldGhvZHMuCgpDdXJyZW50bHksIHRoaXMgaXMgZG9uZSBvbmx5IGZvciB0aGUgSW50 ZWwgZGlzcGxheSBwb3J0cy4gQnV0IGluIGZ1dHVyZSwKdGhpcyBjYW4gYmUgZG9uZSBmb3IgYW55 IG90aGVyIHBvcnRzIGlmIHRoZSBoYXJkd2FyZSBiZWNvbWVzIGF2YWlsYWJsZQooZS5nLiBleHRl cm5hbCBtb25pdG9ycyBzdXBwb3J0aW5nIGludGVncmF0ZWQgcHJpdmFjeSBzY3JlZW5zPykuCgpT aWduZWQtb2ZmLWJ5OiBSYWphdCBKYWluIDxyYWphdGphQGdvb2dsZS5jb20+CkNoYW5nZS1JZDog SWM5ZmYwN2ZjNGE1MDc5N2QyZDBkZmI5MTlmMTFhYTA4MjFhNGI1NDgKLS0tCnYyOiBGb3JtZWQg Ynkgc3BsaXR0aW5nIHRoZSBvcmlnaW5hbCBwYXRjaCBpbnRvIG11bHRpcGxlIHBhdGNoZXMuCiAg ICAtIEFsbCBjb2RlIGhhcyBiZWVuIG1vdmVkIGludG8gaTkxNSBub3cuCiAgICAtIFByaXZhY3kg c2NyZWVuIGlzIGEgaTkxNSBwcm9wZXJ0eQogICAgLSBIYXZlIGEgbG9jYWwgc3RhdGUgdmFyaWFi bGUgdG8gc3RvcmUgdGhlIHBydmFjeSBzY3JlZW4uIERvbid0IHJlYWQKICAgICAgaXQgZnJvbSBo YXJkd2FyZS4KCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgICAgICAg fCAgMyArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9hdG9taWMuYyAgIHwg MTMgKysrLQogLi4uL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Nvbm5lY3Rvci5jICAgIHwg MzUgKysrKysrKysrKwogLi4uL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Nvbm5lY3Rvci5o ICAgIHwgIDEgKwogLi4uL2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oICAg IHwgIDQgKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYyAgICAgICB8 ICA1ICsrCiAuLi4vZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wcml2YWN5X3NjcmVlbi5jICAgfCA3 MCArKysrKysrKysrKysrKysrKysrCiAuLi4vZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wcml2YWN5 X3NjcmVlbi5oICAgfCAyNSArKysrKysrCiBpbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggICAg ICAgICAgICAgICAgICAgfCAxNCArKysrCiA5IGZpbGVzIGNoYW5nZWQsIDE2NiBpbnNlcnRpb25z KCspLCA0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfcHJpdmFjeV9zY3JlZW4uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHJpdmFjeV9zY3JlZW4uaAoKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvTWFrZWZpbGUKaW5kZXggMjU4N2VhODM0ZjA2Li4zNTg5ZWJjZjI3YmMgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L01ha2VmaWxlCkBAIC0xODUsNyArMTg1LDggQEAgaTkxNS15ICs9IFwKIAlkaXNwbGF5L2ludGVs X3RjLm8KIGk5MTUtJChDT05GSUdfQUNQSSkgKz0gXAogCWRpc3BsYXkvaW50ZWxfYWNwaS5vIFwK LQlkaXNwbGF5L2ludGVsX29wcmVnaW9uLm8KKwlkaXNwbGF5L2ludGVsX29wcmVnaW9uLm8gXAor CWRpc3BsYXkvaW50ZWxfcHJpdmFjeV9zY3JlZW4ubwogaTkxNS0kKENPTkZJR19EUk1fRkJERVZf RU1VTEFUSU9OKSArPSBcCiAJZGlzcGxheS9pbnRlbF9mYmRldi5vCiAKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfYXRvbWljLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX2F0b21pYy5jCmluZGV4IGQzZmI3NWJiOWViMS4uMzc4Nzcy ZDM0NDljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2F0 b21pYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfYXRvbWljLmMK QEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJpbnRlbF9hdG9taWMuaCIKICNpbmNsdWRlICJp bnRlbF9kaXNwbGF5X3R5cGVzLmgiCiAjaW5jbHVkZSAiaW50ZWxfaGRjcC5oIgorI2luY2x1ZGUg ImludGVsX3ByaXZhY3lfc2NyZWVuLmgiCiAjaW5jbHVkZSAiaW50ZWxfc3ByaXRlLmgiCiAKIC8q KgpAQCAtNTcsMTEgKzU4LDE0IEBAIGludCBpbnRlbF9kaWdpdGFsX2Nvbm5lY3Rvcl9hdG9taWNf Z2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwogCXN0cnVjdCBpbnRlbF9k aWdpdGFsX2Nvbm5lY3Rvcl9zdGF0ZSAqaW50ZWxfY29ubl9zdGF0ZSA9CiAJCXRvX2ludGVsX2Rp Z2l0YWxfY29ubmVjdG9yX3N0YXRlKHN0YXRlKTsKKwlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpp bnRlbF9jb25uZWN0b3IgPSB0b19pbnRlbF9jb25uZWN0b3IoY29ubmVjdG9yKTsKIAogCWlmIChw cm9wZXJ0eSA9PSBkZXZfcHJpdi0+Zm9yY2VfYXVkaW9fcHJvcGVydHkpCiAJCSp2YWwgPSBpbnRl bF9jb25uX3N0YXRlLT5mb3JjZV9hdWRpbzsKIAllbHNlIGlmIChwcm9wZXJ0eSA9PSBkZXZfcHJp di0+YnJvYWRjYXN0X3JnYl9wcm9wZXJ0eSkKIAkJKnZhbCA9IGludGVsX2Nvbm5fc3RhdGUtPmJy b2FkY2FzdF9yZ2I7CisJZWxzZSBpZiAocHJvcGVydHkgPT0gaW50ZWxfY29ubmVjdG9yLT5wcml2 YWN5X3NjcmVlbl9wcm9wZXJ0eSkKKwkJKnZhbCA9IGludGVsX2Nvbm5fc3RhdGUtPnByaXZhY3lf c2NyZWVuX3N0YXR1czsKIAllbHNlIHsKIAkJRFJNX0RFQlVHX0FUT01JQygiVW5rbm93biBwcm9w ZXJ0eSBbUFJPUDolZDolc11cbiIsCiAJCQkJIHByb3BlcnR5LT5iYXNlLmlkLCBwcm9wZXJ0eS0+ bmFtZSk7CkBAIC04OSwxNSArOTMsMTggQEAgaW50IGludGVsX2RpZ2l0YWxfY29ubmVjdG9yX2F0 b21pY19zZXRfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7CiAJc3RydWN0IGlu dGVsX2RpZ2l0YWxfY29ubmVjdG9yX3N0YXRlICppbnRlbF9jb25uX3N0YXRlID0KIAkJdG9faW50 ZWxfZGlnaXRhbF9jb25uZWN0b3Jfc3RhdGUoc3RhdGUpOworCXN0cnVjdCBpbnRlbF9jb25uZWN0 b3IgKmludGVsX2Nvbm5lY3RvciA9IHRvX2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwogCiAJ aWYgKHByb3BlcnR5ID09IGRldl9wcml2LT5mb3JjZV9hdWRpb19wcm9wZXJ0eSkgewogCQlpbnRl bF9jb25uX3N0YXRlLT5mb3JjZV9hdWRpbyA9IHZhbDsKIAkJcmV0dXJuIDA7Ci0JfQotCi0JaWYg KHByb3BlcnR5ID09IGRldl9wcml2LT5icm9hZGNhc3RfcmdiX3Byb3BlcnR5KSB7CisJfSBlbHNl IGlmIChwcm9wZXJ0eSA9PSBkZXZfcHJpdi0+YnJvYWRjYXN0X3JnYl9wcm9wZXJ0eSkgewogCQlp bnRlbF9jb25uX3N0YXRlLT5icm9hZGNhc3RfcmdiID0gdmFsOwogCQlyZXR1cm4gMDsKKwl9IGVs c2UgaWYgKHByb3BlcnR5ID09IGludGVsX2Nvbm5lY3Rvci0+cHJpdmFjeV9zY3JlZW5fcHJvcGVy dHkpIHsKKwkJaW50ZWxfcHJpdmFjeV9zY3JlZW5fc2V0X3ZhbChpbnRlbF9jb25uZWN0b3IsIHZh bCk7CisJCWludGVsX2Nvbm5fc3RhdGUtPnByaXZhY3lfc2NyZWVuX3N0YXR1cyA9IHZhbDsKKwkJ cmV0dXJuIDA7CiAJfQogCiAJRFJNX0RFQlVHX0FUT01JQygiVW5rbm93biBwcm9wZXJ0eSBbUFJP UDolZDolc11cbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2Nvbm5lY3Rvci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jb25u ZWN0b3IuYwppbmRleCAzMDhlYzYzMjA3ZWUuLjNjY2JmNTJhZWRmOSAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jb25uZWN0b3IuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Nvbm5lY3Rvci5jCkBAIC0yODEsMyArMjgxLDM4 IEBAIGludGVsX2F0dGFjaF9jb2xvcnNwYWNlX3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IpCiAJCWRybV9vYmplY3RfYXR0YWNoX3Byb3BlcnR5KCZjb25uZWN0b3ItPmJh c2UsCiAJCQkJCSAgIGNvbm5lY3Rvci0+Y29sb3JzcGFjZV9wcm9wZXJ0eSwgMCk7CiB9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3Byb3BfZW51bV9saXN0IHByaXZhY3lfc2NyZWVuX2VudW1b XSA9IHsKKwl7IFBSSVZBQ1lfU0NSRUVOX0RJU0FCTEVELCAiRGlzYWJsZWQiIH0sCisJeyBQUklW QUNZX1NDUkVFTl9FTkFCTEVELCAiRW5hYmxlZCIgfSwKK307CisKKy8qKgorICogaW50ZWxfYXR0 YWNoX3ByaXZhY3lfc2NyZWVuX3Byb3BlcnR5IC0KKyAqICAgICBjcmVhdGUgYW5kIGF0dGFjaCB0 aGUgY29ubmVjdGVyJ3MgcHJpdmFjeS1zY3JlZW4gcHJvcGVydHkuICoKKyAqIEBjb25uZWN0b3I6 IGNvbm5lY3RvciBmb3Igd2hpY2ggdG8gaW5pdCB0aGUgcHJpdmFjeS1zY3JlZW4gcHJvcGVydHkK KyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYW5kIGF0dGFjaGVzIHRoZSAicHJpdmFjeS1z Y3JlZW4iIHByb3BlcnR5IHRvIHRoZQorICogY29ubmVjdG9yLiBJbml0aWFsIHN0YXRlIG9mIHBy aXZhY3ktc2NyZWVuIGlzIHNldCB0byBkaXNhYmxlZC4KKyAqLwordm9pZAoraW50ZWxfYXR0YWNo X3ByaXZhY3lfc2NyZWVuX3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Ip Cit7CisJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29ubmVjdG9yID0gdG9faW50ZWxf Y29ubmVjdG9yKGNvbm5lY3Rvcik7CisJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcDsKKworCWlm ICghaW50ZWxfY29ubmVjdG9yLT5wcml2YWN5X3NjcmVlbl9wcm9wZXJ0eSkgeworCQlwcm9wID0g ZHJtX3Byb3BlcnR5X2NyZWF0ZV9lbnVtKGNvbm5lY3Rvci0+ZGV2LAorCQkJCQkJRFJNX01PREVf UFJPUF9FTlVNLAorCQkJCQkJInByaXZhY3ktc2NyZWVuIiwKKwkJCQkJCXByaXZhY3lfc2NyZWVu X2VudW0sCisJCQkJCSAgICBBUlJBWV9TSVpFKHByaXZhY3lfc2NyZWVuX2VudW0pKTsKKwkJaWYg KCFwcm9wKQorCQkJcmV0dXJuOworCisJCWludGVsX2Nvbm5lY3Rvci0+cHJpdmFjeV9zY3JlZW5f cHJvcGVydHkgPSBwcm9wOworCX0KKworCWRybV9vYmplY3RfYXR0YWNoX3Byb3BlcnR5KCZjb25u ZWN0b3ItPmJhc2UsIHByb3AsCisJCQkJICAgUFJJVkFDWV9TQ1JFRU5fRElTQUJMRUQpOworfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jb25uZWN0b3Iu aCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY29ubmVjdG9yLmgKaW5kZXgg OTNhNzM3NWM4MTk2Li42MTAwNWYzN2EzMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfY29ubmVjdG9yLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9jb25uZWN0b3IuaApAQCAtMzEsNSArMzEsNiBAQCB2b2lkIGludGVsX2F0 dGFjaF9mb3JjZV9hdWRpb19wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y KTsKIHZvaWQgaW50ZWxfYXR0YWNoX2Jyb2FkY2FzdF9yZ2JfcHJvcGVydHkoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3Rvcik7CiB2b2lkIGludGVsX2F0dGFjaF9hc3BlY3RfcmF0aW9fcHJv cGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CiB2b2lkIGludGVsX2F0dGFj aF9jb2xvcnNwYWNlX3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwor dm9pZCBpbnRlbF9hdHRhY2hfcHJpdmFjeV9zY3JlZW5fcHJvcGVydHkoc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3Rvcik7CiAKICNlbmRpZiAvKiBfX0lOVEVMX0NPTk5FQ1RPUl9IX18gKi8K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90 eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVz LmgKaW5kZXggYzI3MDZhZmMwNjliLi44M2I4Yzk4MDQ5YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oCkBAIC00MjYsNiArNDI2 LDkgQEAgc3RydWN0IGludGVsX2Nvbm5lY3RvciB7CiAJc3RydWN0IHdvcmtfc3RydWN0IG1vZGVz ZXRfcmV0cnlfd29yazsKIAogCXN0cnVjdCBpbnRlbF9oZGNwIGhkY3A7CisKKwkvKiBPcHRpb25h bCAicHJpdmFjeS1zY3JlZW4iIHByb3BlcnR5IGZvciB0aGUgY29ubmVjdG9yIHBhbmVsICovCisJ c3RydWN0IGRybV9wcm9wZXJ0eSAqcHJpdmFjeV9zY3JlZW5fcHJvcGVydHk7CiB9OwogCiBzdHJ1 Y3QgaW50ZWxfZGlnaXRhbF9jb25uZWN0b3Jfc3RhdGUgewpAQCAtNDMzLDYgKzQzNiw3IEBAIHN0 cnVjdCBpbnRlbF9kaWdpdGFsX2Nvbm5lY3Rvcl9zdGF0ZSB7CiAKIAllbnVtIGhkbWlfZm9yY2Vf YXVkaW8gZm9yY2VfYXVkaW87CiAJaW50IGJyb2FkY2FzdF9yZ2I7CisJZW51bSBpbnRlbF9wcml2 YWN5X3NjcmVlbl9zdGF0dXMgcHJpdmFjeV9zY3JlZW5fc3RhdHVzOwogfTsKIAogI2RlZmluZSB0 b19pbnRlbF9kaWdpdGFsX2Nvbm5lY3Rvcl9zdGF0ZSh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0 IGludGVsX2RpZ2l0YWxfY29ubmVjdG9yX3N0YXRlLCBiYXNlKQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9kcC5jCmluZGV4IDRmYWM0MDhhNDI5OS4uMTk2M2U5MjQwNGJhIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jCkBAIC02Miw2ICs2Miw3IEBACiAj aW5jbHVkZSAiaW50ZWxfbHNwY29uLmgiCiAjaW5jbHVkZSAiaW50ZWxfbHZkcy5oIgogI2luY2x1 ZGUgImludGVsX3BhbmVsLmgiCisjaW5jbHVkZSAiaW50ZWxfcHJpdmFjeV9zY3JlZW4uaCIKICNp bmNsdWRlICJpbnRlbF9wc3IuaCIKICNpbmNsdWRlICJpbnRlbF9zaWRlYmFuZC5oIgogI2luY2x1 ZGUgImludGVsX3RjLmgiCkBAIC02MzU4LDYgKzYzNTksMTAgQEAgaW50ZWxfZHBfYWRkX3Byb3Bl cnRpZXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3QKIAogCQkvKiBMb29rdXAgdGhlIEFDUEkgbm9kZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBj b25uZWN0b3IgKi8KIAkJaW50ZWxfY29ubmVjdG9yX2xvb2t1cF9hY3BpX25vZGUoaW50ZWxfY29u bmVjdG9yKTsKKworCQkvKiBDaGVjayBmb3IgaW50ZWdyYXRlZCBQcml2YWN5IHNjcmVlbiBzdXBw b3J0ICovCisJCWlmIChpbnRlbF9wcml2YWN5X3NjcmVlbl9wcmVzZW50KGludGVsX2Nvbm5lY3Rv cikpCisJCQlpbnRlbF9hdHRhY2hfcHJpdmFjeV9zY3JlZW5fcHJvcGVydHkoY29ubmVjdG9yKTsK IAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf cHJpdmFjeV9zY3JlZW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHJp dmFjeV9zY3JlZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjRj NDIyZTM4YzUxYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3Bs YXkvaW50ZWxfcHJpdmFjeV9zY3JlZW4uYwpAQCAtMCwwICsxLDcwIEBACisvLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgorLyoKKyAqIEludGVsIEFDUEkgcHJpdmFj eSBzY3JlZW4gY29kZQorICoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEdvb2dsZSBJbmMuCisgKi8K KworI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKworI2luY2x1ZGUgImludGVsX3ByaXZhY3lfc2Ny ZWVuLmgiCisKKyNkZWZpbmUgQ09OTkVDVE9SX0RTTV9SRVZJRCAxCisKKyNkZWZpbmUgQ09OTkVD VE9SX0RTTV9GTl9QUklWQUNZX0VOQUJMRQkJMgorI2RlZmluZSBDT05ORUNUT1JfRFNNX0ZOX1BS SVZBQ1lfRElTQUJMRQkJMworCitzdGF0aWMgY29uc3QgZ3VpZF90IGRybV9jb25uX2RzbV9ndWlk ID0KKwlHVUlEX0lOSVQoMHhDNzAzMzExMywgMHg4NzIwLCAweDRDRUIsCisJCSAgMHg5MCwgMHg5 MCwgMHg5RCwgMHg1MiwgMHhCMywgMHhFNSwgMHgyRCwgMHg3Myk7CisKKy8qIE1ha2VzIF9EU00g Y2FsbCB0byBzZXQgcHJpdmFjeSBzY3JlZW4gc3RhdHVzICovCitzdGF0aWMgdm9pZCBhY3BpX3By aXZhY3lfc2NyZWVuX2NhbGxfZHNtKGFjcGlfaGFuZGxlIGNvbm5faGFuZGxlLCB1NjQgZnVuYykK K3sKKwl1bmlvbiBhY3BpX29iamVjdCAqb2JqOworCisJb2JqID0gYWNwaV9ldmFsdWF0ZV9kc20o Y29ubl9oYW5kbGUsICZkcm1fY29ubl9kc21fZ3VpZCwKKwkJCQlDT05ORUNUT1JfRFNNX1JFVklE LCBmdW5jLCBOVUxMKTsKKwlpZiAoIW9iaikgeworCQlEUk1fREVCVUdfRFJJVkVSKCJmYWlsZWQg dG8gZXZhbHVhdGUgX0RTTSBmb3IgZm4gJWxseFxuIiwgZnVuYyk7CisJCXJldHVybjsKKwl9CisK KwlBQ1BJX0ZSRUUob2JqKTsKK30KKwordm9pZCBpbnRlbF9wcml2YWN5X3NjcmVlbl9zZXRfdmFs KHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3RvciwKKwkJCQkgIGVudW0gaW50 ZWxfcHJpdmFjeV9zY3JlZW5fc3RhdHVzIHZhbCkKK3sKKwlhY3BpX2hhbmRsZSBhY3BpX2hhbmRs ZSA9IGludGVsX2Nvbm5lY3Rvci0+YWNwaV9oYW5kbGU7CisKKwlpZiAoIWFjcGlfaGFuZGxlKQor CQlyZXR1cm47CisKKwlpZiAodmFsID09IFBSSVZBQ1lfU0NSRUVOX0RJU0FCTEVEKQorCQlhY3Bp X3ByaXZhY3lfc2NyZWVuX2NhbGxfZHNtKGFjcGlfaGFuZGxlLAorCQkJCQkgICAgIENPTk5FQ1RP Ul9EU01fRk5fUFJJVkFDWV9ESVNBQkxFKTsKKwllbHNlIGlmICh2YWwgPT0gUFJJVkFDWV9TQ1JF RU5fRU5BQkxFRCkKKwkJYWNwaV9wcml2YWN5X3NjcmVlbl9jYWxsX2RzbShhY3BpX2hhbmRsZSwK KwkJCQkJICAgICBDT05ORUNUT1JfRFNNX0ZOX1BSSVZBQ1lfRU5BQkxFKTsKK30KKworYm9vbCBp bnRlbF9wcml2YWN5X3NjcmVlbl9wcmVzZW50KHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVs X2Nvbm5lY3RvcikKK3sKKwlhY3BpX2hhbmRsZSBoYW5kbGUgPSBpbnRlbF9jb25uZWN0b3ItPmFj cGlfaGFuZGxlOworCisJaWYgKCFoYW5kbGUpCisJCXJldHVybiBmYWxzZTsKKworCWlmICghYWNw aV9jaGVja19kc20oaGFuZGxlLCAmZHJtX2Nvbm5fZHNtX2d1aWQsCisJCQkgICAgQ09OTkVDVE9S X0RTTV9SRVZJRCwKKwkJCSAgICAxIDw8IENPTk5FQ1RPUl9EU01fRk5fUFJJVkFDWV9FTkFCTEUg fAorCQkJICAgIDEgPDwgQ09OTkVDVE9SX0RTTV9GTl9QUklWQUNZX0RJU0FCTEUpKSB7CisJCURS TV9XQVJOKCIlczogT2RkLCBjb25uZWN0b3IgQUNQSSBub2RlIGJ1dCBubyBwcml2YWN5IHNjcm4/ XG4iLAorCQkJIGRldl9uYW1lKGludGVsX2Nvbm5lY3Rvci0+YmFzZS5kZXYtPmRldikpOworCQly ZXR1cm4gZmFsc2U7CisJfQorCURSTV9ERVZfSU5GTyhpbnRlbF9jb25uZWN0b3ItPmJhc2UuZGV2 LT5kZXYsCisJCSAgICAgInN1cHBvcnRzIHByaXZhY3kgc2NyZWVuXG4iKTsKKwlyZXR1cm4gdHJ1 ZTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHJp dmFjeV9zY3JlZW4uaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHJpdmFj eV9zY3JlZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjIxMmY3 MzM0OWEwMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfcHJpdmFjeV9zY3JlZW4uaApAQCAtMCwwICsxLDI1IEBACisvKiBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqLworLyoKKyAqIENvcHlyaWdodCDCqSAyMDE5 IEdvb2dsZSBJbmMuCisgKi8KKworI2lmbmRlZiBfX0RSTV9QUklWQUNZX1NDUkVFTl9IX18KKyNk ZWZpbmUgX19EUk1fUFJJVkFDWV9TQ1JFRU5fSF9fCisKKyNpbmNsdWRlICJpbnRlbF9kaXNwbGF5 X3R5cGVzLmgiCisKKyNpZmRlZiBDT05GSUdfQUNQSQorYm9vbCBpbnRlbF9wcml2YWN5X3NjcmVl bl9wcmVzZW50KHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3Rvcik7Cit2b2lk IGludGVsX3ByaXZhY3lfc2NyZWVuX3NldF92YWwoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50 ZWxfY29ubmVjdG9yLAorCQkJCSAgZW51bSBpbnRlbF9wcml2YWN5X3NjcmVlbl9zdGF0dXMgdmFs KTsKKyNlbHNlCitib29sIGludGVsX3ByaXZhY3lfc2NyZWVuX3ByZXNlbnQoc3RydWN0IGludGVs X2Nvbm5lY3RvciAqaW50ZWxfY29ubmVjdG9yKTsKK3sKKwlyZXR1cm4gZmFsc2U7Cit9Cit2b2lk IGludGVsX3ByaXZhY3lfc2NyZWVuX3NldF92YWwoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50 ZWxfY29ubmVjdG9yLAorCQkJCSAgZW51bSBpbnRlbF9wcml2YWN5X3NjcmVlbl9zdGF0dXMgdmFs KQoreyB9CisjZW5kaWYgLyogQ09ORklHX0FDUEkgKi8KKworI2VuZGlmIC8qIF9fRFJNX1BSSVZB Q1lfU0NSRUVOX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5o IGIvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCmluZGV4IDQ2OWRjNTEyY2NhMy4uY2YwOGQ1 NjM2MzYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgKKysrIGIvaW5j bHVkZS91YXBpL2RybS9pOTE1X2RybS5oCkBAIC0yMTIzLDYgKzIxMjMsMjAgQEAgc3RydWN0IGRy bV9pOTE1X3F1ZXJ5X2VuZ2luZV9pbmZvIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZW5naW5lX2luZm8g ZW5naW5lc1tdOwogfTsKIAorLyoqCisgKiBlbnVtIGludGVsX3ByaXZhY3lfc2NyZWVuX3N0YXR1 cyAtIHByaXZhY3lfc2NyZWVuIHN0YXR1cworICoKKyAqIFRoaXMgZW51bSBpcyB1c2VkIHRvIHRy YWNrIGFuZCBjb250cm9sIHRoZSBzdGF0ZSBvZiB0aGUgaW50ZWdyYXRlZCBwcml2YWN5CisgKiBz Y3JlZW4gcHJlc2VudCBvbiBzb21lIGRpc3BsYXkgcGFuZWxzLCB2aWEgdGhlICJwcml2YWN5LXNj cmVlbiIgcHJvcGVydHkuCisgKgorICogQFBSSVZBQ1lfU0NSRUVOX0RJU0FCTEVEOiBUaGUgcHJp dmFjeS1zY3JlZW4gb24gdGhlIHBhbmVsIGlzIGRpc2FibGVkCisgKiBAUFJJVkFDWV9TQ1JFRU5f RU5BQkxFRDogIFRoZSBwcml2YWN5LXNjcmVlbiBvbiB0aGUgcGFuZWwgaXMgZW5hYmxlZAorICoq LworZW51bSBpbnRlbF9wcml2YWN5X3NjcmVlbl9zdGF0dXMgeworCVBSSVZBQ1lfU0NSRUVOX0RJ U0FCTEVEID0gMCwKKwlQUklWQUNZX1NDUkVFTl9FTkFCTEVEID0gMSwKK307CisKICNpZiBkZWZp bmVkKF9fY3BsdXNwbHVzKQogfQogI2VuZGlmCi0tIAoyLjI0LjAucmMxLjM2My5nYjFiY2NkM2Uz ZC1nb29nCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpk cmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw= 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=-9.7 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT 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 64D79C5DF60 for ; Tue, 5 Nov 2019 17:53:47 +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 4776A217F5 for ; Tue, 5 Nov 2019 17:53:47 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4776A217F5 Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.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 A17766EA3A; Tue, 5 Nov 2019 17:53:46 +0000 (UTC) Received: from mail-pf1-x44a.google.com (mail-pf1-x44a.google.com [IPv6:2607:f8b0:4864:20::44a]) by gabe.freedesktop.org (Postfix) with ESMTPS id B9AB9896AF for ; Mon, 4 Nov 2019 19:41:58 +0000 (UTC) Received: by mail-pf1-x44a.google.com with SMTP id x3so14225811pfr.2 for ; Mon, 04 Nov 2019 11:41:58 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc:content-transfer-encoding; bh=YdVyYg2TmQWu6y8ro0turwBGFf90uoYSpY3DT2vX64s=; b=ABrIMJNtja9YnlIW34cjh2XnGwRda66XUjH7RrLzew0qTcL+zpZs+x0FI1zIijfait 82GDX4WIHz4P9j3h/oMDZo+sAgvFrHo67bC907bra4a1SMy/tb4Op81AW14CaVIInLOw cJMhWx8Ba2PBSaBDvPb+eQapYI3csNmG3l/6JSMaC9c0uL/W5likmDHgU9HItHAa/Jb6 ayjb3BYikBQ9ggsz69cMwj0TEojhVP9djlgSyLzWLZ/hJ8n96N3eykB4rYqJph1uWB4r e5ucWBw3avjApX4Fap2ds6q67aL5kMW6oGECpADKTc1Vw0kHezrSDASKcT5I2+zVEKTo G+Qg== X-Gm-Message-State: APjAAAUIfRy+02DJZWMYG8TDqlSb8mZGbjCzAHKzCiBBnW1+5C+GdEHk 56aaw0+OktdhhVhdEWoXsXPY/HmHQezY X-Google-Smtp-Source: APXvYqzWIBzt1JHFt6ogpAZ9xhFDdJOaQRMhLHY3DaK6aSnDATwEYqL9Z+ZpYF7w/1SgRgoQeZ4Pv0z/pePe X-Received: by 2002:a63:1a5e:: with SMTP id a30mr27305343pgm.299.1572896517733; Mon, 04 Nov 2019 11:41:57 -0800 (PST) Date: Mon, 4 Nov 2019 11:41:47 -0800 In-Reply-To: <20191104194147.185642-1-rajatja@google.com> Message-Id: <20191104194147.185642-3-rajatja@google.com> Mime-Version: 1.0 References: <20191023001206.15741-1-rajatja@google.com> <20191104194147.185642-1-rajatja@google.com> X-Mailer: git-send-email 2.24.0.rc1.363.gb1bccd3e3d-goog From: Rajat Jain To: Maarten Lankhorst , Maxime Ripard , Sean Paul , David Airlie , Daniel Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , "=?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?=" , Chris Wilson , Imre Deak , "=?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?=" , 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 X-Mailman-Approved-At: Tue, 05 Nov 2019 17:53:45 +0000 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc:content-transfer-encoding; bh=YdVyYg2TmQWu6y8ro0turwBGFf90uoYSpY3DT2vX64s=; b=Awwva4OYZqsgvr4XB0eagEQnkESDAGDOveuMyxA3WOUz8UuvUMXNsmfJCxw8C+D15U Y/RcQc3ZcVijXTQNWz8uaJkOx28iDKZscO1fFDaC/dcGcUmHyXv57TEAHJq8C/j7JdAN bbR0ylU4f9XtuKy5n5bJttu2tNFrg4HBVhvgX6HHmoyxkJhwlWkJpioZxTnKvp9auQoM +HGUS96U5pkKVyfB4aHsK3hCVeRM3xkjLZOHMI1nhB8Cm9KlDxsB3c3ZeEK/xn1Jckzf Jgjx+gzf+ZnzOmcXUFx2tKvBiA564FXEaZHx+QpG/kPWTNjkxeCBpx1GgIFjW5uNPB1u yKkw== Subject: [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: <20191104194147.mx4W0Io25LQNrxXJ7_HiLZXW2aJbYYDeVkbNXtzlT5s@z> Q2VydGFpbiBsYXB0b3BzIG5vdyBjb21lIHdpdGggcGFuZWxzIHRoYXQgaGF2ZSBpbnRlZ3JhdGVk IHByaXZhY3kKc2NyZWVucyBvbiB0aGVtLiBUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc3Vj aCBwYW5lbHMgYnkgYWRkaW5nCmEgcHJpdmFjeS1zY3JlZW4gcHJvcGVydHkgdG8gdGhlIGludGVs X2Nvbm5lY3RvciBmb3IgdGhlIHBhbmVsLCB0aGF0CnRoZSB1c2Vyc3BhY2UgY2FuIHRoZW4gdXNl IHRvIGNvbnRyb2wgYW5kIGNoZWNrIHRoZSBzdGF0dXMuCgpJZGVudGlmeWluZyB0aGUgcHJlc2Vu Y2Ugb2YgcHJpdmFjeSBzY3JlZW4sIGFuZCBjb250cm9sbGluZyBpdCwgaXMgZG9uZQp2aWEgQUNQ SSBfRFNNIG1ldGhvZHMuCgpDdXJyZW50bHksIHRoaXMgaXMgZG9uZSBvbmx5IGZvciB0aGUgSW50 ZWwgZGlzcGxheSBwb3J0cy4gQnV0IGluIGZ1dHVyZSwKdGhpcyBjYW4gYmUgZG9uZSBmb3IgYW55 IG90aGVyIHBvcnRzIGlmIHRoZSBoYXJkd2FyZSBiZWNvbWVzIGF2YWlsYWJsZQooZS5nLiBleHRl cm5hbCBtb25pdG9ycyBzdXBwb3J0aW5nIGludGVncmF0ZWQgcHJpdmFjeSBzY3JlZW5zPykuCgpT aWduZWQtb2ZmLWJ5OiBSYWphdCBKYWluIDxyYWphdGphQGdvb2dsZS5jb20+CkNoYW5nZS1JZDog SWM5ZmYwN2ZjNGE1MDc5N2QyZDBkZmI5MTlmMTFhYTA4MjFhNGI1NDgKLS0tCnYyOiBGb3JtZWQg Ynkgc3BsaXR0aW5nIHRoZSBvcmlnaW5hbCBwYXRjaCBpbnRvIG11bHRpcGxlIHBhdGNoZXMuCiAg ICAtIEFsbCBjb2RlIGhhcyBiZWVuIG1vdmVkIGludG8gaTkxNSBub3cuCiAgICAtIFByaXZhY3kg c2NyZWVuIGlzIGEgaTkxNSBwcm9wZXJ0eQogICAgLSBIYXZlIGEgbG9jYWwgc3RhdGUgdmFyaWFi bGUgdG8gc3RvcmUgdGhlIHBydmFjeSBzY3JlZW4uIERvbid0IHJlYWQKICAgICAgaXQgZnJvbSBo YXJkd2FyZS4KCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgICAgICAg fCAgMyArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9hdG9taWMuYyAgIHwg MTMgKysrLQogLi4uL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Nvbm5lY3Rvci5jICAgIHwg MzUgKysrKysrKysrKwogLi4uL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Nvbm5lY3Rvci5o ICAgIHwgIDEgKwogLi4uL2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oICAg IHwgIDQgKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYyAgICAgICB8 ICA1ICsrCiAuLi4vZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wcml2YWN5X3NjcmVlbi5jICAgfCA3 MCArKysrKysrKysrKysrKysrKysrCiAuLi4vZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wcml2YWN5 X3NjcmVlbi5oICAgfCAyNSArKysrKysrCiBpbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggICAg ICAgICAgICAgICAgICAgfCAxNCArKysrCiA5IGZpbGVzIGNoYW5nZWQsIDE2NiBpbnNlcnRpb25z KCspLCA0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfcHJpdmFjeV9zY3JlZW4uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHJpdmFjeV9zY3JlZW4uaAoKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvTWFrZWZpbGUKaW5kZXggMjU4N2VhODM0ZjA2Li4zNTg5ZWJjZjI3YmMgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L01ha2VmaWxlCkBAIC0xODUsNyArMTg1LDggQEAgaTkxNS15ICs9IFwKIAlkaXNwbGF5L2ludGVs X3RjLm8KIGk5MTUtJChDT05GSUdfQUNQSSkgKz0gXAogCWRpc3BsYXkvaW50ZWxfYWNwaS5vIFwK LQlkaXNwbGF5L2ludGVsX29wcmVnaW9uLm8KKwlkaXNwbGF5L2ludGVsX29wcmVnaW9uLm8gXAor CWRpc3BsYXkvaW50ZWxfcHJpdmFjeV9zY3JlZW4ubwogaTkxNS0kKENPTkZJR19EUk1fRkJERVZf RU1VTEFUSU9OKSArPSBcCiAJZGlzcGxheS9pbnRlbF9mYmRldi5vCiAKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfYXRvbWljLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX2F0b21pYy5jCmluZGV4IGQzZmI3NWJiOWViMS4uMzc4Nzcy ZDM0NDljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2F0 b21pYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfYXRvbWljLmMK QEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJpbnRlbF9hdG9taWMuaCIKICNpbmNsdWRlICJp bnRlbF9kaXNwbGF5X3R5cGVzLmgiCiAjaW5jbHVkZSAiaW50ZWxfaGRjcC5oIgorI2luY2x1ZGUg ImludGVsX3ByaXZhY3lfc2NyZWVuLmgiCiAjaW5jbHVkZSAiaW50ZWxfc3ByaXRlLmgiCiAKIC8q KgpAQCAtNTcsMTEgKzU4LDE0IEBAIGludCBpbnRlbF9kaWdpdGFsX2Nvbm5lY3Rvcl9hdG9taWNf Z2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwogCXN0cnVjdCBpbnRlbF9k aWdpdGFsX2Nvbm5lY3Rvcl9zdGF0ZSAqaW50ZWxfY29ubl9zdGF0ZSA9CiAJCXRvX2ludGVsX2Rp Z2l0YWxfY29ubmVjdG9yX3N0YXRlKHN0YXRlKTsKKwlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpp bnRlbF9jb25uZWN0b3IgPSB0b19pbnRlbF9jb25uZWN0b3IoY29ubmVjdG9yKTsKIAogCWlmIChw cm9wZXJ0eSA9PSBkZXZfcHJpdi0+Zm9yY2VfYXVkaW9fcHJvcGVydHkpCiAJCSp2YWwgPSBpbnRl bF9jb25uX3N0YXRlLT5mb3JjZV9hdWRpbzsKIAllbHNlIGlmIChwcm9wZXJ0eSA9PSBkZXZfcHJp di0+YnJvYWRjYXN0X3JnYl9wcm9wZXJ0eSkKIAkJKnZhbCA9IGludGVsX2Nvbm5fc3RhdGUtPmJy b2FkY2FzdF9yZ2I7CisJZWxzZSBpZiAocHJvcGVydHkgPT0gaW50ZWxfY29ubmVjdG9yLT5wcml2 YWN5X3NjcmVlbl9wcm9wZXJ0eSkKKwkJKnZhbCA9IGludGVsX2Nvbm5fc3RhdGUtPnByaXZhY3lf c2NyZWVuX3N0YXR1czsKIAllbHNlIHsKIAkJRFJNX0RFQlVHX0FUT01JQygiVW5rbm93biBwcm9w ZXJ0eSBbUFJPUDolZDolc11cbiIsCiAJCQkJIHByb3BlcnR5LT5iYXNlLmlkLCBwcm9wZXJ0eS0+ bmFtZSk7CkBAIC04OSwxNSArOTMsMTggQEAgaW50IGludGVsX2RpZ2l0YWxfY29ubmVjdG9yX2F0 b21pY19zZXRfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7CiAJc3RydWN0IGlu dGVsX2RpZ2l0YWxfY29ubmVjdG9yX3N0YXRlICppbnRlbF9jb25uX3N0YXRlID0KIAkJdG9faW50 ZWxfZGlnaXRhbF9jb25uZWN0b3Jfc3RhdGUoc3RhdGUpOworCXN0cnVjdCBpbnRlbF9jb25uZWN0 b3IgKmludGVsX2Nvbm5lY3RvciA9IHRvX2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwogCiAJ aWYgKHByb3BlcnR5ID09IGRldl9wcml2LT5mb3JjZV9hdWRpb19wcm9wZXJ0eSkgewogCQlpbnRl bF9jb25uX3N0YXRlLT5mb3JjZV9hdWRpbyA9IHZhbDsKIAkJcmV0dXJuIDA7Ci0JfQotCi0JaWYg KHByb3BlcnR5ID09IGRldl9wcml2LT5icm9hZGNhc3RfcmdiX3Byb3BlcnR5KSB7CisJfSBlbHNl IGlmIChwcm9wZXJ0eSA9PSBkZXZfcHJpdi0+YnJvYWRjYXN0X3JnYl9wcm9wZXJ0eSkgewogCQlp bnRlbF9jb25uX3N0YXRlLT5icm9hZGNhc3RfcmdiID0gdmFsOwogCQlyZXR1cm4gMDsKKwl9IGVs c2UgaWYgKHByb3BlcnR5ID09IGludGVsX2Nvbm5lY3Rvci0+cHJpdmFjeV9zY3JlZW5fcHJvcGVy dHkpIHsKKwkJaW50ZWxfcHJpdmFjeV9zY3JlZW5fc2V0X3ZhbChpbnRlbF9jb25uZWN0b3IsIHZh bCk7CisJCWludGVsX2Nvbm5fc3RhdGUtPnByaXZhY3lfc2NyZWVuX3N0YXR1cyA9IHZhbDsKKwkJ cmV0dXJuIDA7CiAJfQogCiAJRFJNX0RFQlVHX0FUT01JQygiVW5rbm93biBwcm9wZXJ0eSBbUFJP UDolZDolc11cbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2Nvbm5lY3Rvci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jb25u ZWN0b3IuYwppbmRleCAzMDhlYzYzMjA3ZWUuLjNjY2JmNTJhZWRmOSAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jb25uZWN0b3IuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Nvbm5lY3Rvci5jCkBAIC0yODEsMyArMjgxLDM4 IEBAIGludGVsX2F0dGFjaF9jb2xvcnNwYWNlX3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IpCiAJCWRybV9vYmplY3RfYXR0YWNoX3Byb3BlcnR5KCZjb25uZWN0b3ItPmJh c2UsCiAJCQkJCSAgIGNvbm5lY3Rvci0+Y29sb3JzcGFjZV9wcm9wZXJ0eSwgMCk7CiB9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3Byb3BfZW51bV9saXN0IHByaXZhY3lfc2NyZWVuX2VudW1b XSA9IHsKKwl7IFBSSVZBQ1lfU0NSRUVOX0RJU0FCTEVELCAiRGlzYWJsZWQiIH0sCisJeyBQUklW QUNZX1NDUkVFTl9FTkFCTEVELCAiRW5hYmxlZCIgfSwKK307CisKKy8qKgorICogaW50ZWxfYXR0 YWNoX3ByaXZhY3lfc2NyZWVuX3Byb3BlcnR5IC0KKyAqICAgICBjcmVhdGUgYW5kIGF0dGFjaCB0 aGUgY29ubmVjdGVyJ3MgcHJpdmFjeS1zY3JlZW4gcHJvcGVydHkuICoKKyAqIEBjb25uZWN0b3I6 IGNvbm5lY3RvciBmb3Igd2hpY2ggdG8gaW5pdCB0aGUgcHJpdmFjeS1zY3JlZW4gcHJvcGVydHkK KyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYW5kIGF0dGFjaGVzIHRoZSAicHJpdmFjeS1z Y3JlZW4iIHByb3BlcnR5IHRvIHRoZQorICogY29ubmVjdG9yLiBJbml0aWFsIHN0YXRlIG9mIHBy aXZhY3ktc2NyZWVuIGlzIHNldCB0byBkaXNhYmxlZC4KKyAqLwordm9pZAoraW50ZWxfYXR0YWNo X3ByaXZhY3lfc2NyZWVuX3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Ip Cit7CisJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29ubmVjdG9yID0gdG9faW50ZWxf Y29ubmVjdG9yKGNvbm5lY3Rvcik7CisJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcDsKKworCWlm ICghaW50ZWxfY29ubmVjdG9yLT5wcml2YWN5X3NjcmVlbl9wcm9wZXJ0eSkgeworCQlwcm9wID0g ZHJtX3Byb3BlcnR5X2NyZWF0ZV9lbnVtKGNvbm5lY3Rvci0+ZGV2LAorCQkJCQkJRFJNX01PREVf UFJPUF9FTlVNLAorCQkJCQkJInByaXZhY3ktc2NyZWVuIiwKKwkJCQkJCXByaXZhY3lfc2NyZWVu X2VudW0sCisJCQkJCSAgICBBUlJBWV9TSVpFKHByaXZhY3lfc2NyZWVuX2VudW0pKTsKKwkJaWYg KCFwcm9wKQorCQkJcmV0dXJuOworCisJCWludGVsX2Nvbm5lY3Rvci0+cHJpdmFjeV9zY3JlZW5f cHJvcGVydHkgPSBwcm9wOworCX0KKworCWRybV9vYmplY3RfYXR0YWNoX3Byb3BlcnR5KCZjb25u ZWN0b3ItPmJhc2UsIHByb3AsCisJCQkJICAgUFJJVkFDWV9TQ1JFRU5fRElTQUJMRUQpOworfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jb25uZWN0b3Iu aCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY29ubmVjdG9yLmgKaW5kZXgg OTNhNzM3NWM4MTk2Li42MTAwNWYzN2EzMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfY29ubmVjdG9yLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9jb25uZWN0b3IuaApAQCAtMzEsNSArMzEsNiBAQCB2b2lkIGludGVsX2F0 dGFjaF9mb3JjZV9hdWRpb19wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y KTsKIHZvaWQgaW50ZWxfYXR0YWNoX2Jyb2FkY2FzdF9yZ2JfcHJvcGVydHkoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3Rvcik7CiB2b2lkIGludGVsX2F0dGFjaF9hc3BlY3RfcmF0aW9fcHJv cGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CiB2b2lkIGludGVsX2F0dGFj aF9jb2xvcnNwYWNlX3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwor dm9pZCBpbnRlbF9hdHRhY2hfcHJpdmFjeV9zY3JlZW5fcHJvcGVydHkoc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3Rvcik7CiAKICNlbmRpZiAvKiBfX0lOVEVMX0NPTk5FQ1RPUl9IX18gKi8K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90 eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVz LmgKaW5kZXggYzI3MDZhZmMwNjliLi44M2I4Yzk4MDQ5YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oCkBAIC00MjYsNiArNDI2 LDkgQEAgc3RydWN0IGludGVsX2Nvbm5lY3RvciB7CiAJc3RydWN0IHdvcmtfc3RydWN0IG1vZGVz ZXRfcmV0cnlfd29yazsKIAogCXN0cnVjdCBpbnRlbF9oZGNwIGhkY3A7CisKKwkvKiBPcHRpb25h bCAicHJpdmFjeS1zY3JlZW4iIHByb3BlcnR5IGZvciB0aGUgY29ubmVjdG9yIHBhbmVsICovCisJ c3RydWN0IGRybV9wcm9wZXJ0eSAqcHJpdmFjeV9zY3JlZW5fcHJvcGVydHk7CiB9OwogCiBzdHJ1 Y3QgaW50ZWxfZGlnaXRhbF9jb25uZWN0b3Jfc3RhdGUgewpAQCAtNDMzLDYgKzQzNiw3IEBAIHN0 cnVjdCBpbnRlbF9kaWdpdGFsX2Nvbm5lY3Rvcl9zdGF0ZSB7CiAKIAllbnVtIGhkbWlfZm9yY2Vf YXVkaW8gZm9yY2VfYXVkaW87CiAJaW50IGJyb2FkY2FzdF9yZ2I7CisJZW51bSBpbnRlbF9wcml2 YWN5X3NjcmVlbl9zdGF0dXMgcHJpdmFjeV9zY3JlZW5fc3RhdHVzOwogfTsKIAogI2RlZmluZSB0 b19pbnRlbF9kaWdpdGFsX2Nvbm5lY3Rvcl9zdGF0ZSh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0 IGludGVsX2RpZ2l0YWxfY29ubmVjdG9yX3N0YXRlLCBiYXNlKQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9kcC5jCmluZGV4IDRmYWM0MDhhNDI5OS4uMTk2M2U5MjQwNGJhIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jCkBAIC02Miw2ICs2Miw3IEBACiAj aW5jbHVkZSAiaW50ZWxfbHNwY29uLmgiCiAjaW5jbHVkZSAiaW50ZWxfbHZkcy5oIgogI2luY2x1 ZGUgImludGVsX3BhbmVsLmgiCisjaW5jbHVkZSAiaW50ZWxfcHJpdmFjeV9zY3JlZW4uaCIKICNp bmNsdWRlICJpbnRlbF9wc3IuaCIKICNpbmNsdWRlICJpbnRlbF9zaWRlYmFuZC5oIgogI2luY2x1 ZGUgImludGVsX3RjLmgiCkBAIC02MzU4LDYgKzYzNTksMTAgQEAgaW50ZWxfZHBfYWRkX3Byb3Bl cnRpZXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3QKIAogCQkvKiBMb29rdXAgdGhlIEFDUEkgbm9kZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBj b25uZWN0b3IgKi8KIAkJaW50ZWxfY29ubmVjdG9yX2xvb2t1cF9hY3BpX25vZGUoaW50ZWxfY29u bmVjdG9yKTsKKworCQkvKiBDaGVjayBmb3IgaW50ZWdyYXRlZCBQcml2YWN5IHNjcmVlbiBzdXBw b3J0ICovCisJCWlmIChpbnRlbF9wcml2YWN5X3NjcmVlbl9wcmVzZW50KGludGVsX2Nvbm5lY3Rv cikpCisJCQlpbnRlbF9hdHRhY2hfcHJpdmFjeV9zY3JlZW5fcHJvcGVydHkoY29ubmVjdG9yKTsK IAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf cHJpdmFjeV9zY3JlZW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHJp dmFjeV9zY3JlZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjRj NDIyZTM4YzUxYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3Bs YXkvaW50ZWxfcHJpdmFjeV9zY3JlZW4uYwpAQCAtMCwwICsxLDcwIEBACisvLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgorLyoKKyAqIEludGVsIEFDUEkgcHJpdmFj eSBzY3JlZW4gY29kZQorICoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEdvb2dsZSBJbmMuCisgKi8K KworI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKworI2luY2x1ZGUgImludGVsX3ByaXZhY3lfc2Ny ZWVuLmgiCisKKyNkZWZpbmUgQ09OTkVDVE9SX0RTTV9SRVZJRCAxCisKKyNkZWZpbmUgQ09OTkVD VE9SX0RTTV9GTl9QUklWQUNZX0VOQUJMRQkJMgorI2RlZmluZSBDT05ORUNUT1JfRFNNX0ZOX1BS SVZBQ1lfRElTQUJMRQkJMworCitzdGF0aWMgY29uc3QgZ3VpZF90IGRybV9jb25uX2RzbV9ndWlk ID0KKwlHVUlEX0lOSVQoMHhDNzAzMzExMywgMHg4NzIwLCAweDRDRUIsCisJCSAgMHg5MCwgMHg5 MCwgMHg5RCwgMHg1MiwgMHhCMywgMHhFNSwgMHgyRCwgMHg3Myk7CisKKy8qIE1ha2VzIF9EU00g Y2FsbCB0byBzZXQgcHJpdmFjeSBzY3JlZW4gc3RhdHVzICovCitzdGF0aWMgdm9pZCBhY3BpX3By aXZhY3lfc2NyZWVuX2NhbGxfZHNtKGFjcGlfaGFuZGxlIGNvbm5faGFuZGxlLCB1NjQgZnVuYykK K3sKKwl1bmlvbiBhY3BpX29iamVjdCAqb2JqOworCisJb2JqID0gYWNwaV9ldmFsdWF0ZV9kc20o Y29ubl9oYW5kbGUsICZkcm1fY29ubl9kc21fZ3VpZCwKKwkJCQlDT05ORUNUT1JfRFNNX1JFVklE LCBmdW5jLCBOVUxMKTsKKwlpZiAoIW9iaikgeworCQlEUk1fREVCVUdfRFJJVkVSKCJmYWlsZWQg dG8gZXZhbHVhdGUgX0RTTSBmb3IgZm4gJWxseFxuIiwgZnVuYyk7CisJCXJldHVybjsKKwl9CisK KwlBQ1BJX0ZSRUUob2JqKTsKK30KKwordm9pZCBpbnRlbF9wcml2YWN5X3NjcmVlbl9zZXRfdmFs KHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3RvciwKKwkJCQkgIGVudW0gaW50 ZWxfcHJpdmFjeV9zY3JlZW5fc3RhdHVzIHZhbCkKK3sKKwlhY3BpX2hhbmRsZSBhY3BpX2hhbmRs ZSA9IGludGVsX2Nvbm5lY3Rvci0+YWNwaV9oYW5kbGU7CisKKwlpZiAoIWFjcGlfaGFuZGxlKQor CQlyZXR1cm47CisKKwlpZiAodmFsID09IFBSSVZBQ1lfU0NSRUVOX0RJU0FCTEVEKQorCQlhY3Bp X3ByaXZhY3lfc2NyZWVuX2NhbGxfZHNtKGFjcGlfaGFuZGxlLAorCQkJCQkgICAgIENPTk5FQ1RP Ul9EU01fRk5fUFJJVkFDWV9ESVNBQkxFKTsKKwllbHNlIGlmICh2YWwgPT0gUFJJVkFDWV9TQ1JF RU5fRU5BQkxFRCkKKwkJYWNwaV9wcml2YWN5X3NjcmVlbl9jYWxsX2RzbShhY3BpX2hhbmRsZSwK KwkJCQkJICAgICBDT05ORUNUT1JfRFNNX0ZOX1BSSVZBQ1lfRU5BQkxFKTsKK30KKworYm9vbCBp bnRlbF9wcml2YWN5X3NjcmVlbl9wcmVzZW50KHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVs X2Nvbm5lY3RvcikKK3sKKwlhY3BpX2hhbmRsZSBoYW5kbGUgPSBpbnRlbF9jb25uZWN0b3ItPmFj cGlfaGFuZGxlOworCisJaWYgKCFoYW5kbGUpCisJCXJldHVybiBmYWxzZTsKKworCWlmICghYWNw aV9jaGVja19kc20oaGFuZGxlLCAmZHJtX2Nvbm5fZHNtX2d1aWQsCisJCQkgICAgQ09OTkVDVE9S X0RTTV9SRVZJRCwKKwkJCSAgICAxIDw8IENPTk5FQ1RPUl9EU01fRk5fUFJJVkFDWV9FTkFCTEUg fAorCQkJICAgIDEgPDwgQ09OTkVDVE9SX0RTTV9GTl9QUklWQUNZX0RJU0FCTEUpKSB7CisJCURS TV9XQVJOKCIlczogT2RkLCBjb25uZWN0b3IgQUNQSSBub2RlIGJ1dCBubyBwcml2YWN5IHNjcm4/ XG4iLAorCQkJIGRldl9uYW1lKGludGVsX2Nvbm5lY3Rvci0+YmFzZS5kZXYtPmRldikpOworCQly ZXR1cm4gZmFsc2U7CisJfQorCURSTV9ERVZfSU5GTyhpbnRlbF9jb25uZWN0b3ItPmJhc2UuZGV2 LT5kZXYsCisJCSAgICAgInN1cHBvcnRzIHByaXZhY3kgc2NyZWVuXG4iKTsKKwlyZXR1cm4gdHJ1 ZTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHJp dmFjeV9zY3JlZW4uaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHJpdmFj eV9zY3JlZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjIxMmY3 MzM0OWEwMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfcHJpdmFjeV9zY3JlZW4uaApAQCAtMCwwICsxLDI1IEBACisvKiBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqLworLyoKKyAqIENvcHlyaWdodCDCqSAyMDE5 IEdvb2dsZSBJbmMuCisgKi8KKworI2lmbmRlZiBfX0RSTV9QUklWQUNZX1NDUkVFTl9IX18KKyNk ZWZpbmUgX19EUk1fUFJJVkFDWV9TQ1JFRU5fSF9fCisKKyNpbmNsdWRlICJpbnRlbF9kaXNwbGF5 X3R5cGVzLmgiCisKKyNpZmRlZiBDT05GSUdfQUNQSQorYm9vbCBpbnRlbF9wcml2YWN5X3NjcmVl bl9wcmVzZW50KHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3Rvcik7Cit2b2lk IGludGVsX3ByaXZhY3lfc2NyZWVuX3NldF92YWwoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50 ZWxfY29ubmVjdG9yLAorCQkJCSAgZW51bSBpbnRlbF9wcml2YWN5X3NjcmVlbl9zdGF0dXMgdmFs KTsKKyNlbHNlCitib29sIGludGVsX3ByaXZhY3lfc2NyZWVuX3ByZXNlbnQoc3RydWN0IGludGVs X2Nvbm5lY3RvciAqaW50ZWxfY29ubmVjdG9yKTsKK3sKKwlyZXR1cm4gZmFsc2U7Cit9Cit2b2lk IGludGVsX3ByaXZhY3lfc2NyZWVuX3NldF92YWwoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50 ZWxfY29ubmVjdG9yLAorCQkJCSAgZW51bSBpbnRlbF9wcml2YWN5X3NjcmVlbl9zdGF0dXMgdmFs KQoreyB9CisjZW5kaWYgLyogQ09ORklHX0FDUEkgKi8KKworI2VuZGlmIC8qIF9fRFJNX1BSSVZB Q1lfU0NSRUVOX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5o IGIvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCmluZGV4IDQ2OWRjNTEyY2NhMy4uY2YwOGQ1 NjM2MzYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgKKysrIGIvaW5j bHVkZS91YXBpL2RybS9pOTE1X2RybS5oCkBAIC0yMTIzLDYgKzIxMjMsMjAgQEAgc3RydWN0IGRy bV9pOTE1X3F1ZXJ5X2VuZ2luZV9pbmZvIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZW5naW5lX2luZm8g ZW5naW5lc1tdOwogfTsKIAorLyoqCisgKiBlbnVtIGludGVsX3ByaXZhY3lfc2NyZWVuX3N0YXR1 cyAtIHByaXZhY3lfc2NyZWVuIHN0YXR1cworICoKKyAqIFRoaXMgZW51bSBpcyB1c2VkIHRvIHRy YWNrIGFuZCBjb250cm9sIHRoZSBzdGF0ZSBvZiB0aGUgaW50ZWdyYXRlZCBwcml2YWN5CisgKiBz Y3JlZW4gcHJlc2VudCBvbiBzb21lIGRpc3BsYXkgcGFuZWxzLCB2aWEgdGhlICJwcml2YWN5LXNj cmVlbiIgcHJvcGVydHkuCisgKgorICogQFBSSVZBQ1lfU0NSRUVOX0RJU0FCTEVEOiBUaGUgcHJp dmFjeS1zY3JlZW4gb24gdGhlIHBhbmVsIGlzIGRpc2FibGVkCisgKiBAUFJJVkFDWV9TQ1JFRU5f RU5BQkxFRDogIFRoZSBwcml2YWN5LXNjcmVlbiBvbiB0aGUgcGFuZWwgaXMgZW5hYmxlZAorICoq LworZW51bSBpbnRlbF9wcml2YWN5X3NjcmVlbl9zdGF0dXMgeworCVBSSVZBQ1lfU0NSRUVOX0RJ U0FCTEVEID0gMCwKKwlQUklWQUNZX1NDUkVFTl9FTkFCTEVEID0gMSwKK307CisKICNpZiBkZWZp bmVkKF9fY3BsdXNwbHVzKQogfQogI2VuZGlmCi0tIAoyLjI0LjAucmMxLjM2My5nYjFiY2NkM2Uz ZC1nb29nCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJ bnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=