From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 946AC10786 for ; Mon, 21 Nov 2022 21:49:47 +0000 (UTC) Received: from umang.jainideasonboard.com (unknown [103.86.18.138]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id A8F1674C; Mon, 21 Nov 2022 22:49:41 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1669067386; bh=3bR6iZFiPI5OEdt/rE6YjEy9FHHlUzmTOGaNIwnNmHY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=W3VC1eMWOB/QVb8g10cqFHtwdn4X92ARIK9TqAjUOrzaCG5n/FT4OhIB7w4xTSYDP N6zaKD2nRKEOwMOtamIHPxQuXGNqI8gj2KRXrypQVihSv1Vz2t1NXdkgUAAeq82++a jgIJQ6qouegyNvDrZgtF3j6mTgL35IE1sqd4ItbU= From: Umang Jain To: linux-media@vger.kernel.org, kernel-list@raspberrypi.com, linux-kernel@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-staging@lists.linux.dev, Broadcom internal kernel review list Cc: Dave Stevenson , Florian Fainelli , Naushir Patuck , David Plowman , Kieran Bingham , Laurent Pinchart , Umang Jain Subject: [PATCH 08/14] uapi: bcm2835-isp: Add bcm2835-isp uapi header file Date: Tue, 22 Nov 2022 03:17:16 +0530 Message-Id: <20221121214722.22563-9-umang.jain@ideasonboard.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221121214722.22563-1-umang.jain@ideasonboard.com> References: <20221121214722.22563-1-umang.jain@ideasonboard.com> Precedence: bulk X-Mailing-List: linux-staging@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Dave Stevenson This file defines the userland interface to the bcm2835-isp driver that will follow in a separate commit. Signed-off-by: Naushir Patuck Signed-off-by: Dave Stevenson Signed-off-by: Umang Jain --- include/uapi/linux/bcm2835-isp.h | 320 +++++++++++++++++++++++++++++ include/uapi/linux/v4l2-controls.h | 6 + 2 files changed, 326 insertions(+) create mode 100644 include/uapi/linux/bcm2835-isp.h diff --git a/include/uapi/linux/bcm2835-isp.h b/include/uapi/linux/bcm2835-isp.h new file mode 100644 index 000000000000..cf8c0437f159 --- /dev/null +++ b/include/uapi/linux/bcm2835-isp.h @@ -0,0 +1,320 @@ +/* SPDX-License-Identifier: ((GPL-2.0+ WITH Linux-syscall-note) OR BSD-3-Clause) */ +/* + * bcm2835-isp.h + * + * BCM2835 ISP driver - user space header file. + * + * Copyright © 2019-2020 Raspberry Pi (Trading) Ltd. + * + * Author: Naushir Patuck (naush@raspberrypi.com) + * + */ + +#ifndef __BCM2835_ISP_H_ +#define __BCM2835_ISP_H_ + +#include + +#define V4L2_CID_USER_BCM2835_ISP_CC_MATRIX \ + (V4L2_CID_USER_BCM2835_ISP_BASE + 0x0001) +#define V4L2_CID_USER_BCM2835_ISP_LENS_SHADING \ + (V4L2_CID_USER_BCM2835_ISP_BASE + 0x0002) +#define V4L2_CID_USER_BCM2835_ISP_BLACK_LEVEL \ + (V4L2_CID_USER_BCM2835_ISP_BASE + 0x0003) +#define V4L2_CID_USER_BCM2835_ISP_GEQ \ + (V4L2_CID_USER_BCM2835_ISP_BASE + 0x0004) +#define V4L2_CID_USER_BCM2835_ISP_GAMMA \ + (V4L2_CID_USER_BCM2835_ISP_BASE + 0x0005) +#define V4L2_CID_USER_BCM2835_ISP_DENOISE \ + (V4L2_CID_USER_BCM2835_ISP_BASE + 0x0006) +#define V4L2_CID_USER_BCM2835_ISP_SHARPEN \ + (V4L2_CID_USER_BCM2835_ISP_BASE + 0x0007) +#define V4L2_CID_USER_BCM2835_ISP_DPC \ + (V4L2_CID_USER_BCM2835_ISP_BASE + 0x0008) + +/* + * All structs below are directly mapped onto the equivalent structs in + * drivers/staging/vc04_services/vchiq-mmal/mmal-parameters.h + * for convenience. + */ + +/** + * struct bcm2835_isp_rational - Rational value type. + * + * @num: Numerator. + * @den: Denominator. + */ +struct bcm2835_isp_rational { + __s32 num; + __u32 den; +}; + +/** + * struct bcm2835_isp_ccm - Colour correction matrix. + * + * @ccm: 3x3 correction matrix coefficients. + * @offsets: 1x3 correction offsets. + */ +struct bcm2835_isp_ccm { + struct bcm2835_isp_rational ccm[3][3]; + __s32 offsets[3]; +}; + +/** + * struct bcm2835_isp_custom_ccm - Custom CCM applied with the + * V4L2_CID_USER_BCM2835_ISP_CC_MATRIX ctrl. + * + * @enabled: Enable custom CCM. + * @ccm: Custom CCM coefficients and offsets. + */ +struct bcm2835_isp_custom_ccm { + __u32 enabled; + struct bcm2835_isp_ccm ccm; +}; + +/** + * enum bcm2835_isp_gain_format - format of the gains in the lens shading + * tables used with the + * V4L2_CID_USER_BCM2835_ISP_LENS_SHADING ctrl. + * + * @GAIN_FORMAT_U0P8_1: Gains are u0.8 format, starting at 1.0 + * @GAIN_FORMAT_U1P7_0: Gains are u1.7 format, starting at 0.0 + * @GAIN_FORMAT_U1P7_1: Gains are u1.7 format, starting at 1.0 + * @GAIN_FORMAT_U2P6_0: Gains are u2.6 format, starting at 0.0 + * @GAIN_FORMAT_U2P6_1: Gains are u2.6 format, starting at 1.0 + * @GAIN_FORMAT_U3P5_0: Gains are u3.5 format, starting at 0.0 + * @GAIN_FORMAT_U3P5_1: Gains are u3.5 format, starting at 1.0 + * @GAIN_FORMAT_U4P10: Gains are u4.10 format, starting at 0.0 + */ +enum bcm2835_isp_gain_format { + GAIN_FORMAT_U0P8_1 = 0, + GAIN_FORMAT_U1P7_0 = 1, + GAIN_FORMAT_U1P7_1 = 2, + GAIN_FORMAT_U2P6_0 = 3, + GAIN_FORMAT_U2P6_1 = 4, + GAIN_FORMAT_U3P5_0 = 5, + GAIN_FORMAT_U3P5_1 = 6, + GAIN_FORMAT_U4P10 = 7, +}; + +/** + * struct bcm2835_isp_lens_shading - Lens shading tables supplied with the + * V4L2_CID_USER_BCM2835_ISP_LENS_SHADING + * ctrl. + * + * @enabled: Enable lens shading. + * @grid_cell_size: Size of grid cells in samples (16, 32, 64, 128 or 256). + * @grid_width: Width of lens shading tables in grid cells. + * @grid_stride: Row to row distance (in grid cells) between grid cells + * in the same horizontal location. + * @grid_height: Height of lens shading tables in grid cells. + * @dmabuf: dmabuf file handle containing the table. + * @ref_transform: Reference transform - unsupported, please pass zero. + * @corner_sampled: Whether the gains are sampled at the corner points + * of the grid cells or in the cell centres. + * @gain_format: Format of the gains (see enum &bcm2835_isp_gain_format). + */ +struct bcm2835_isp_lens_shading { + __u32 enabled; + __u32 grid_cell_size; + __u32 grid_width; + __u32 grid_stride; + __u32 grid_height; + __s32 dmabuf; + __u32 ref_transform; + __u32 corner_sampled; + __u32 gain_format; +}; + +/** + * struct bcm2835_isp_black_level - Sensor black level set with the + * V4L2_CID_USER_BCM2835_ISP_BLACK_LEVEL ctrl. + * + * @enabled: Enable black level. + * @black_level_r: Black level for red channel. + * @black_level_g: Black level for green channels. + * @black_level_b: Black level for blue channel. + */ +struct bcm2835_isp_black_level { + __u32 enabled; + __u16 black_level_r; + __u16 black_level_g; + __u16 black_level_b; + __u8 padding[2]; /* Unused */ +}; + +/** + * struct bcm2835_isp_geq - Green equalisation parameters set with the + * V4L2_CID_USER_BCM2835_ISP_GEQ ctrl. + * + * @enabled: Enable green equalisation. + * @offset: Fixed offset of the green equalisation threshold. + * @slope: Slope of the green equalisation threshold. + */ +struct bcm2835_isp_geq { + __u32 enabled; + __u32 offset; + struct bcm2835_isp_rational slope; +}; + +#define BCM2835_NUM_GAMMA_PTS 33 + +/** + * struct bcm2835_isp_gamma - Gamma parameters set with the + * V4L2_CID_USER_BCM2835_ISP_GAMMA ctrl. + * + * @enabled: Enable gamma adjustment. + * @X: X values of the points defining the gamma curve. + * Values should be scaled to 16 bits. + * @Y: Y values of the points defining the gamma curve. + * Values should be scaled to 16 bits. + */ +struct bcm2835_isp_gamma { + __u32 enabled; + __u16 x[BCM2835_NUM_GAMMA_PTS]; + __u16 y[BCM2835_NUM_GAMMA_PTS]; +}; + +/** + * struct bcm2835_isp_denoise - Denoise parameters set with the + * V4L2_CID_USER_BCM2835_ISP_DENOISE ctrl. + * + * @enabled: Enable denoise. + * @constant: Fixed offset of the noise threshold. + * @slope: Slope of the noise threshold. + * @strength: Denoise strength between 0.0 (off) and 1.0 (maximum). + */ +struct bcm2835_isp_denoise { + __u32 enabled; + __u32 constant; + struct bcm2835_isp_rational slope; + struct bcm2835_isp_rational strength; +}; + +/** + * struct bcm2835_isp_sharpen - Sharpen parameters set with the + * V4L2_CID_USER_BCM2835_ISP_SHARPEN ctrl. + * + * @enabled: Enable sharpening. + * @threshold: Threshold at which to start sharpening pixels. + * @strength: Strength with which pixel sharpening increases. + * @limit: Limit to the amount of sharpening applied. + */ +struct bcm2835_isp_sharpen { + __u32 enabled; + struct bcm2835_isp_rational threshold; + struct bcm2835_isp_rational strength; + struct bcm2835_isp_rational limit; +}; + +/** + * enum bcm2835_isp_dpc_mode - defective pixel correction (DPC) strength. + * + * @DPC_MODE_OFF: No DPC. + * @DPC_MODE_NORMAL: Normal DPC. + * @DPC_MODE_STRONG: Strong DPC. + */ +enum bcm2835_isp_dpc_mode { + DPC_MODE_OFF = 0, + DPC_MODE_NORMAL = 1, + DPC_MODE_STRONG = 2, +}; + +/** + * struct bcm2835_isp_dpc - Defective pixel correction (DPC) parameters set + * with the V4L2_CID_USER_BCM2835_ISP_DPC ctrl. + * + * @enabled: Enable DPC. + * @strength: DPC strength (see enum &bcm2835_isp_dpc_mode). + */ +struct bcm2835_isp_dpc { + __u32 enabled; + __u32 strength; +}; + +/* + * ISP statistics structures. + * + * The bcm2835_isp_stats structure is generated at the output of the + * statistics node. Note that this does not directly map onto the statistics + * output of the ISP HW. Instead, the MMAL firmware code maps the HW statistics + * to the bcm2835_isp_stats structure. + */ +#define DEFAULT_AWB_REGIONS_X 16 +#define DEFAULT_AWB_REGIONS_Y 12 + +#define NUM_HISTOGRAMS 2 +#define NUM_HISTOGRAM_BINS 128 +#define AWB_REGIONS (DEFAULT_AWB_REGIONS_X * DEFAULT_AWB_REGIONS_Y) +#define FLOATING_REGIONS 16 +#define AGC_REGIONS 16 +#define FOCUS_REGIONS 12 + +/** + * struct bcm2835_isp_stats_hist - Histogram statistics + * + * @r_hist: Red channel histogram. + * @g_hist: Combined green channel histogram. + * @b_hist: Blue channel histogram. + */ +struct bcm2835_isp_stats_hist { + __u32 r_hist[NUM_HISTOGRAM_BINS]; + __u32 g_hist[NUM_HISTOGRAM_BINS]; + __u32 b_hist[NUM_HISTOGRAM_BINS]; +}; + +/** + * struct bcm2835_isp_stats_region - Region sums. + * + * @counted: The number of 2x2 bayer tiles accumulated. + * @notcounted: The number of 2x2 bayer tiles not accumulated. + * @r_sum: Total sum of counted pixels in the red channel for a region. + * @g_sum: Total sum of counted pixels in the green channel for a region. + * @b_sum: Total sum of counted pixels in the blue channel for a region. + */ +struct bcm2835_isp_stats_region { + __u32 counted; + __u32 notcounted; + __u64 r_sum; + __u64 g_sum; + __u64 b_sum; +}; + +/** + * struct bcm2835_isp_stats_focus - Focus statistics. + * + * @contrast_val: Focus measure - accumulated output of the focus filter. + * In the first dimension, index [0] counts pixels below a + * preset threshold, and index [1] counts pixels above the + * threshold. In the second dimension, index [0] uses the + * first predefined filter, and index [1] uses the second + * predefined filter. + * @contrast_val_num: The number of counted pixels in the above accumulation. + */ +struct bcm2835_isp_stats_focus { + __u64 contrast_val[2][2]; + __u32 contrast_val_num[2][2]; +}; + +/** + * struct bcm2835_isp_stats - ISP statistics. + * + * @version: Version of the bcm2835_isp_stats structure. + * @size: Size of the bcm2835_isp_stats structure. + * @hist: Histogram statistics for the entire image. + * @awb_stats: Statistics for the regions defined for AWB calculations. + * @floating_stats: Statistics for arbitrarily placed (floating) regions. + * @agc_stats: Statistics for the regions defined for AGC calculations. + * @focus_stats: Focus filter statistics for the focus regions. + */ +struct bcm2835_isp_stats { + __u32 version; + __u32 size; + struct bcm2835_isp_stats_hist hist[NUM_HISTOGRAMS]; + struct bcm2835_isp_stats_region awb_stats[AWB_REGIONS]; + struct bcm2835_isp_stats_region floating_stats[FLOATING_REGIONS]; + struct bcm2835_isp_stats_region agc_stats[AGC_REGIONS]; + struct bcm2835_isp_stats_focus focus_stats[FOCUS_REGIONS]; +}; + +#endif /* __BCM2835_ISP_H_ */ diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h index b5e7d082b8ad..31606d42ec58 100644 --- a/include/uapi/linux/v4l2-controls.h +++ b/include/uapi/linux/v4l2-controls.h @@ -217,6 +217,7 @@ enum v4l2_colorfx { * The base for Allegro driver controls. * We reserve 16 controls for this driver. */ + #define V4L2_CID_USER_ALLEGRO_BASE (V4L2_CID_USER_BASE + 0x1170) /* @@ -231,6 +232,11 @@ enum v4l2_colorfx { */ #define V4L2_CID_USER_DW100_BASE (V4L2_CID_USER_BASE + 0x1190) +/* The base for the bcm2835-isp driver controls. + * We reserve 16 controls for this driver. + */ +#define V4L2_CID_USER_BCM2835_ISP_BASE (V4L2_CID_USER_BASE + 0x11a0) + /* MPEG-class control IDs */ /* The MPEG controls are applicable to all codec controls * and the 'MPEG' part of the define is historical */ -- 2.37.3 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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 2220BC433FE for ; Mon, 21 Nov 2022 21:52:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=RblQsn7RAiAx3xX7hzBgcmuBA32c6BiATE9fwMcZzPQ=; b=PvSoHUg1GOOtWE ySsKm0xvrxe11kV8EVo1LUT6nU8I39Kj9XetyKNRrRYVWfd8Dy0tvHnm5ma3Se9+jNiNY3OLP5Bkn GlPKquFCgRDrsZQnsXOHUZYYHHX7zpPcKdbHVFmdatv9xnWIS0f4G/aijFse2JJSh4ANnzK8KPBlg mga4od3GltzhkWZpYnUvjpyPJ/vbjVScDEZmhR7epxfocheYI8Gxx/93pHivJZwphsib4iCnjQA47 uvFFdq2JiQdioJjR98rw5CeAR7RoIaWF6B7FUwXhdJPmdTI7ImLvWJ+xkuItBtjVXAcr95KLIhOIN zzi4vA0BAzvHMyooTnNQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oxEhW-000e5C-V1; Mon, 21 Nov 2022 21:51:39 +0000 Received: from perceval.ideasonboard.com ([213.167.242.64]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oxEfj-000dH0-EV; Mon, 21 Nov 2022 21:49:53 +0000 Received: from umang.jainideasonboard.com (unknown [103.86.18.138]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id A8F1674C; Mon, 21 Nov 2022 22:49:41 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1669067386; bh=3bR6iZFiPI5OEdt/rE6YjEy9FHHlUzmTOGaNIwnNmHY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=W3VC1eMWOB/QVb8g10cqFHtwdn4X92ARIK9TqAjUOrzaCG5n/FT4OhIB7w4xTSYDP N6zaKD2nRKEOwMOtamIHPxQuXGNqI8gj2KRXrypQVihSv1Vz2t1NXdkgUAAeq82++a jgIJQ6qouegyNvDrZgtF3j6mTgL35IE1sqd4ItbU= From: Umang Jain To: linux-media@vger.kernel.org, kernel-list@raspberrypi.com, linux-kernel@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-staging@lists.linux.dev, Broadcom internal kernel review list Cc: Dave Stevenson , Florian Fainelli , Naushir Patuck , David Plowman , Kieran Bingham , Laurent Pinchart , Umang Jain Subject: [PATCH 08/14] uapi: bcm2835-isp: Add bcm2835-isp uapi header file Date: Tue, 22 Nov 2022 03:17:16 +0530 Message-Id: <20221121214722.22563-9-umang.jain@ideasonboard.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221121214722.22563-1-umang.jain@ideasonboard.com> References: <20221121214722.22563-1-umang.jain@ideasonboard.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20221121_134947_880647_511B9EEF X-CRM114-Status: GOOD ( 20.06 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org RnJvbTogRGF2ZSBTdGV2ZW5zb24gPGRhdmUuc3RldmVuc29uQHJhc3BiZXJyeXBpLmNvbT4KClRo aXMgZmlsZSBkZWZpbmVzIHRoZSB1c2VybGFuZCBpbnRlcmZhY2UgdG8gdGhlIGJjbTI4MzUtaXNw IGRyaXZlcgp0aGF0IHdpbGwgZm9sbG93IGluIGEgc2VwYXJhdGUgY29tbWl0LgoKU2lnbmVkLW9m Zi1ieTogTmF1c2hpciBQYXR1Y2sgPG5hdXNoQHJhc3BiZXJyeXBpLmNvbT4KU2lnbmVkLW9mZi1i eTogRGF2ZSBTdGV2ZW5zb24gPGRhdmUuc3RldmVuc29uQHJhc3BiZXJyeXBpLmNvbT4KU2lnbmVk LW9mZi1ieTogVW1hbmcgSmFpbiA8dW1hbmcuamFpbkBpZGVhc29uYm9hcmQuY29tPgotLS0KIGlu Y2x1ZGUvdWFwaS9saW51eC9iY20yODM1LWlzcC5oICAgfCAzMjAgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKIGluY2x1ZGUvdWFwaS9saW51eC92NGwyLWNvbnRyb2xzLmggfCAgIDYgKwog MiBmaWxlcyBjaGFuZ2VkLCAzMjYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGlu Y2x1ZGUvdWFwaS9saW51eC9iY20yODM1LWlzcC5oCgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBp L2xpbnV4L2JjbTI4MzUtaXNwLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYmNtMjgzNS1pc3AuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmNmOGMwNDM3ZjE1OQotLS0g L2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9iY20yODM1LWlzcC5oCkBAIC0wLDAg KzEsMzIwIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKChHUEwtMi4wKyBXSVRIIExp bnV4LXN5c2NhbGwtbm90ZSkgT1IgQlNELTMtQ2xhdXNlKSAqLworLyoKKyAqIGJjbTI4MzUtaXNw LmgKKyAqCisgKiBCQ00yODM1IElTUCBkcml2ZXIgLSB1c2VyIHNwYWNlIGhlYWRlciBmaWxlLgor ICoKKyAqIENvcHlyaWdodCDCqSAyMDE5LTIwMjAgUmFzcGJlcnJ5IFBpIChUcmFkaW5nKSBMdGQu CisgKgorICogQXV0aG9yOiBOYXVzaGlyIFBhdHVjayAobmF1c2hAcmFzcGJlcnJ5cGkuY29tKQor ICoKKyAqLworCisjaWZuZGVmIF9fQkNNMjgzNV9JU1BfSF8KKyNkZWZpbmUgX19CQ00yODM1X0lT UF9IXworCisjaW5jbHVkZSA8bGludXgvdjRsMi1jb250cm9scy5oPgorCisjZGVmaW5lIFY0TDJf Q0lEX1VTRVJfQkNNMjgzNV9JU1BfQ0NfTUFUUklYCVwKKwkJCQkoVjRMMl9DSURfVVNFUl9CQ00y ODM1X0lTUF9CQVNFICsgMHgwMDAxKQorI2RlZmluZSBWNEwyX0NJRF9VU0VSX0JDTTI4MzVfSVNQ X0xFTlNfU0hBRElORwlcCisJCQkJKFY0TDJfQ0lEX1VTRVJfQkNNMjgzNV9JU1BfQkFTRSArIDB4 MDAwMikKKyNkZWZpbmUgVjRMMl9DSURfVVNFUl9CQ00yODM1X0lTUF9CTEFDS19MRVZFTAlcCisJ CQkJKFY0TDJfQ0lEX1VTRVJfQkNNMjgzNV9JU1BfQkFTRSArIDB4MDAwMykKKyNkZWZpbmUgVjRM Ml9DSURfVVNFUl9CQ00yODM1X0lTUF9HRVEJCVwKKwkJCQkoVjRMMl9DSURfVVNFUl9CQ00yODM1 X0lTUF9CQVNFICsgMHgwMDA0KQorI2RlZmluZSBWNEwyX0NJRF9VU0VSX0JDTTI4MzVfSVNQX0dB TU1BCQlcCisJCQkJKFY0TDJfQ0lEX1VTRVJfQkNNMjgzNV9JU1BfQkFTRSArIDB4MDAwNSkKKyNk ZWZpbmUgVjRMMl9DSURfVVNFUl9CQ00yODM1X0lTUF9ERU5PSVNFCVwKKwkJCQkoVjRMMl9DSURf VVNFUl9CQ00yODM1X0lTUF9CQVNFICsgMHgwMDA2KQorI2RlZmluZSBWNEwyX0NJRF9VU0VSX0JD TTI4MzVfSVNQX1NIQVJQRU4JXAorCQkJCShWNEwyX0NJRF9VU0VSX0JDTTI4MzVfSVNQX0JBU0Ug KyAweDAwMDcpCisjZGVmaW5lIFY0TDJfQ0lEX1VTRVJfQkNNMjgzNV9JU1BfRFBDCQlcCisJCQkJ KFY0TDJfQ0lEX1VTRVJfQkNNMjgzNV9JU1BfQkFTRSArIDB4MDAwOCkKKworLyoKKyAqIEFsbCBz dHJ1Y3RzIGJlbG93IGFyZSBkaXJlY3RseSBtYXBwZWQgb250byB0aGUgZXF1aXZhbGVudCBzdHJ1 Y3RzIGluCisgKiBkcml2ZXJzL3N0YWdpbmcvdmMwNF9zZXJ2aWNlcy92Y2hpcS1tbWFsL21tYWwt cGFyYW1ldGVycy5oCisgKiBmb3IgY29udmVuaWVuY2UuCisgKi8KKworLyoqCisgKiBzdHJ1Y3Qg YmNtMjgzNV9pc3BfcmF0aW9uYWwgLSBSYXRpb25hbCB2YWx1ZSB0eXBlLgorICoKKyAqIEBudW06 CU51bWVyYXRvci4KKyAqIEBkZW46CURlbm9taW5hdG9yLgorICovCitzdHJ1Y3QgYmNtMjgzNV9p c3BfcmF0aW9uYWwgeworCV9fczMyIG51bTsKKwlfX3UzMiBkZW47Cit9OworCisvKioKKyAqIHN0 cnVjdCBiY20yODM1X2lzcF9jY20gLSBDb2xvdXIgY29ycmVjdGlvbiBtYXRyaXguCisgKgorICog QGNjbToJM3gzIGNvcnJlY3Rpb24gbWF0cml4IGNvZWZmaWNpZW50cy4KKyAqIEBvZmZzZXRzOgkx eDMgY29ycmVjdGlvbiBvZmZzZXRzLgorICovCitzdHJ1Y3QgYmNtMjgzNV9pc3BfY2NtIHsKKwlz dHJ1Y3QgYmNtMjgzNV9pc3BfcmF0aW9uYWwgY2NtWzNdWzNdOworCV9fczMyIG9mZnNldHNbM107 Cit9OworCisvKioKKyAqIHN0cnVjdCBiY20yODM1X2lzcF9jdXN0b21fY2NtIC0gQ3VzdG9tIEND TSBhcHBsaWVkIHdpdGggdGhlCisgKgkJCQkgICBWNEwyX0NJRF9VU0VSX0JDTTI4MzVfSVNQX0ND X01BVFJJWCBjdHJsLgorICoKKyAqIEBlbmFibGVkOglFbmFibGUgY3VzdG9tIENDTS4KKyAqIEBj Y206CUN1c3RvbSBDQ00gY29lZmZpY2llbnRzIGFuZCBvZmZzZXRzLgorICovCitzdHJ1Y3QgYmNt MjgzNV9pc3BfY3VzdG9tX2NjbSB7CisJX191MzIgZW5hYmxlZDsKKwlzdHJ1Y3QgYmNtMjgzNV9p c3BfY2NtIGNjbTsKK307CisKKy8qKgorICogZW51bSBiY20yODM1X2lzcF9nYWluX2Zvcm1hdCAt IGZvcm1hdCBvZiB0aGUgZ2FpbnMgaW4gdGhlIGxlbnMgc2hhZGluZworICoJCQkJICB0YWJsZXMg dXNlZCB3aXRoIHRoZQorICoJCQkJICBWNEwyX0NJRF9VU0VSX0JDTTI4MzVfSVNQX0xFTlNfU0hB RElORyBjdHJsLgorICoKKyAqIEBHQUlOX0ZPUk1BVF9VMFA4XzE6CQlHYWlucyBhcmUgdTAuOCBm b3JtYXQsIHN0YXJ0aW5nIGF0IDEuMAorICogQEdBSU5fRk9STUFUX1UxUDdfMDoJCUdhaW5zIGFy ZSB1MS43IGZvcm1hdCwgc3RhcnRpbmcgYXQgMC4wCisgKiBAR0FJTl9GT1JNQVRfVTFQN18xOgkJ R2FpbnMgYXJlIHUxLjcgZm9ybWF0LCBzdGFydGluZyBhdCAxLjAKKyAqIEBHQUlOX0ZPUk1BVF9V MlA2XzA6CQlHYWlucyBhcmUgdTIuNiBmb3JtYXQsIHN0YXJ0aW5nIGF0IDAuMAorICogQEdBSU5f Rk9STUFUX1UyUDZfMToJCUdhaW5zIGFyZSB1Mi42IGZvcm1hdCwgc3RhcnRpbmcgYXQgMS4wCisg KiBAR0FJTl9GT1JNQVRfVTNQNV8wOgkJR2FpbnMgYXJlIHUzLjUgZm9ybWF0LCBzdGFydGluZyBh dCAwLjAKKyAqIEBHQUlOX0ZPUk1BVF9VM1A1XzE6CQlHYWlucyBhcmUgdTMuNSBmb3JtYXQsIHN0 YXJ0aW5nIGF0IDEuMAorICogQEdBSU5fRk9STUFUX1U0UDEwOgkJR2FpbnMgYXJlIHU0LjEwIGZv cm1hdCwgc3RhcnRpbmcgYXQgMC4wCisgKi8KK2VudW0gYmNtMjgzNV9pc3BfZ2Fpbl9mb3JtYXQg eworCUdBSU5fRk9STUFUX1UwUDhfMSA9IDAsCisJR0FJTl9GT1JNQVRfVTFQN18wID0gMSwKKwlH QUlOX0ZPUk1BVF9VMVA3XzEgPSAyLAorCUdBSU5fRk9STUFUX1UyUDZfMCA9IDMsCisJR0FJTl9G T1JNQVRfVTJQNl8xID0gNCwKKwlHQUlOX0ZPUk1BVF9VM1A1XzAgPSA1LAorCUdBSU5fRk9STUFU X1UzUDVfMSA9IDYsCisJR0FJTl9GT1JNQVRfVTRQMTAgID0gNywKK307CisKKy8qKgorICogc3Ry dWN0IGJjbTI4MzVfaXNwX2xlbnNfc2hhZGluZyAtIExlbnMgc2hhZGluZyB0YWJsZXMgc3VwcGxp ZWQgd2l0aCB0aGUKKyAqCQkJCSAgICAgVjRMMl9DSURfVVNFUl9CQ00yODM1X0lTUF9MRU5TX1NI QURJTkcKKyAqCQkJCSAgICAgY3RybC4KKyAqCisgKiBAZW5hYmxlZDoJCUVuYWJsZSBsZW5zIHNo YWRpbmcuCisgKiBAZ3JpZF9jZWxsX3NpemU6CVNpemUgb2YgZ3JpZCBjZWxscyBpbiBzYW1wbGVz ICgxNiwgMzIsIDY0LCAxMjggb3IgMjU2KS4KKyAqIEBncmlkX3dpZHRoOgkJV2lkdGggb2YgbGVu cyBzaGFkaW5nIHRhYmxlcyBpbiBncmlkIGNlbGxzLgorICogQGdyaWRfc3RyaWRlOglSb3cgdG8g cm93IGRpc3RhbmNlIChpbiBncmlkIGNlbGxzKSBiZXR3ZWVuIGdyaWQgY2VsbHMKKyAqCQkJaW4g dGhlIHNhbWUgaG9yaXpvbnRhbCBsb2NhdGlvbi4KKyAqIEBncmlkX2hlaWdodDoJSGVpZ2h0IG9m IGxlbnMgc2hhZGluZyB0YWJsZXMgaW4gZ3JpZCBjZWxscy4KKyAqIEBkbWFidWY6CQlkbWFidWYg ZmlsZSBoYW5kbGUgY29udGFpbmluZyB0aGUgdGFibGUuCisgKiBAcmVmX3RyYW5zZm9ybToJUmVm ZXJlbmNlIHRyYW5zZm9ybSAtIHVuc3VwcG9ydGVkLCBwbGVhc2UgcGFzcyB6ZXJvLgorICogQGNv cm5lcl9zYW1wbGVkOglXaGV0aGVyIHRoZSBnYWlucyBhcmUgc2FtcGxlZCBhdCB0aGUgY29ybmVy IHBvaW50cworICoJCQlvZiB0aGUgZ3JpZCBjZWxscyBvciBpbiB0aGUgY2VsbCBjZW50cmVzLgor ICogQGdhaW5fZm9ybWF0OglGb3JtYXQgb2YgdGhlIGdhaW5zIChzZWUgZW51bSAmYmNtMjgzNV9p c3BfZ2Fpbl9mb3JtYXQpLgorICovCitzdHJ1Y3QgYmNtMjgzNV9pc3BfbGVuc19zaGFkaW5nIHsK KwlfX3UzMiBlbmFibGVkOworCV9fdTMyIGdyaWRfY2VsbF9zaXplOworCV9fdTMyIGdyaWRfd2lk dGg7CisJX191MzIgZ3JpZF9zdHJpZGU7CisJX191MzIgZ3JpZF9oZWlnaHQ7CisJX19zMzIgZG1h YnVmOworCV9fdTMyIHJlZl90cmFuc2Zvcm07CisJX191MzIgY29ybmVyX3NhbXBsZWQ7CisJX191 MzIgZ2Fpbl9mb3JtYXQ7Cit9OworCisvKioKKyAqIHN0cnVjdCBiY20yODM1X2lzcF9ibGFja19s ZXZlbCAtIFNlbnNvciBibGFjayBsZXZlbCBzZXQgd2l0aCB0aGUKKyAqCQkJCSAgICBWNEwyX0NJ RF9VU0VSX0JDTTI4MzVfSVNQX0JMQUNLX0xFVkVMIGN0cmwuCisgKgorICogQGVuYWJsZWQ6CQlF bmFibGUgYmxhY2sgbGV2ZWwuCisgKiBAYmxhY2tfbGV2ZWxfcjoJQmxhY2sgbGV2ZWwgZm9yIHJl ZCBjaGFubmVsLgorICogQGJsYWNrX2xldmVsX2c6CUJsYWNrIGxldmVsIGZvciBncmVlbiBjaGFu bmVscy4KKyAqIEBibGFja19sZXZlbF9iOglCbGFjayBsZXZlbCBmb3IgYmx1ZSBjaGFubmVsLgor ICovCitzdHJ1Y3QgYmNtMjgzNV9pc3BfYmxhY2tfbGV2ZWwgeworCV9fdTMyIGVuYWJsZWQ7CisJ X191MTYgYmxhY2tfbGV2ZWxfcjsKKwlfX3UxNiBibGFja19sZXZlbF9nOworCV9fdTE2IGJsYWNr X2xldmVsX2I7CisJX191OCBwYWRkaW5nWzJdOyAvKiBVbnVzZWQgKi8KK307CisKKy8qKgorICog c3RydWN0IGJjbTI4MzVfaXNwX2dlcSAtIEdyZWVuIGVxdWFsaXNhdGlvbiBwYXJhbWV0ZXJzIHNl dCB3aXRoIHRoZQorICoJCQkgICAgVjRMMl9DSURfVVNFUl9CQ00yODM1X0lTUF9HRVEgY3RybC4K KyAqCisgKiBAZW5hYmxlZDoJRW5hYmxlIGdyZWVuIGVxdWFsaXNhdGlvbi4KKyAqIEBvZmZzZXQ6 CUZpeGVkIG9mZnNldCBvZiB0aGUgZ3JlZW4gZXF1YWxpc2F0aW9uIHRocmVzaG9sZC4KKyAqIEBz bG9wZToJU2xvcGUgb2YgdGhlIGdyZWVuIGVxdWFsaXNhdGlvbiB0aHJlc2hvbGQuCisgKi8KK3N0 cnVjdCBiY20yODM1X2lzcF9nZXEgeworCV9fdTMyIGVuYWJsZWQ7CisJX191MzIgb2Zmc2V0Owor CXN0cnVjdCBiY20yODM1X2lzcF9yYXRpb25hbCBzbG9wZTsKK307CisKKyNkZWZpbmUgQkNNMjgz NV9OVU1fR0FNTUFfUFRTIDMzCisKKy8qKgorICogc3RydWN0IGJjbTI4MzVfaXNwX2dhbW1hIC0g R2FtbWEgcGFyYW1ldGVycyBzZXQgd2l0aCB0aGUKKyAqCQkJICAgICAgVjRMMl9DSURfVVNFUl9C Q00yODM1X0lTUF9HQU1NQSBjdHJsLgorICoKKyAqIEBlbmFibGVkOglFbmFibGUgZ2FtbWEgYWRq dXN0bWVudC4KKyAqIEBYOgkJWCB2YWx1ZXMgb2YgdGhlIHBvaW50cyBkZWZpbmluZyB0aGUgZ2Ft bWEgY3VydmUuCisgKgkJVmFsdWVzIHNob3VsZCBiZSBzY2FsZWQgdG8gMTYgYml0cy4KKyAqIEBZ OgkJWSB2YWx1ZXMgb2YgdGhlIHBvaW50cyBkZWZpbmluZyB0aGUgZ2FtbWEgY3VydmUuCisgKgkJ VmFsdWVzIHNob3VsZCBiZSBzY2FsZWQgdG8gMTYgYml0cy4KKyAqLworc3RydWN0IGJjbTI4MzVf aXNwX2dhbW1hIHsKKwlfX3UzMiBlbmFibGVkOworCV9fdTE2IHhbQkNNMjgzNV9OVU1fR0FNTUFf UFRTXTsKKwlfX3UxNiB5W0JDTTI4MzVfTlVNX0dBTU1BX1BUU107Cit9OworCisvKioKKyAqIHN0 cnVjdCBiY20yODM1X2lzcF9kZW5vaXNlIC0gRGVub2lzZSBwYXJhbWV0ZXJzIHNldCB3aXRoIHRo ZQorICoJCQkJVjRMMl9DSURfVVNFUl9CQ00yODM1X0lTUF9ERU5PSVNFIGN0cmwuCisgKgorICog QGVuYWJsZWQ6CUVuYWJsZSBkZW5vaXNlLgorICogQGNvbnN0YW50OglGaXhlZCBvZmZzZXQgb2Yg dGhlIG5vaXNlIHRocmVzaG9sZC4KKyAqIEBzbG9wZToJU2xvcGUgb2YgdGhlIG5vaXNlIHRocmVz aG9sZC4KKyAqIEBzdHJlbmd0aDoJRGVub2lzZSBzdHJlbmd0aCBiZXR3ZWVuIDAuMCAob2ZmKSBh bmQgMS4wIChtYXhpbXVtKS4KKyAqLworc3RydWN0IGJjbTI4MzVfaXNwX2Rlbm9pc2UgeworCV9f dTMyIGVuYWJsZWQ7CisJX191MzIgY29uc3RhbnQ7CisJc3RydWN0IGJjbTI4MzVfaXNwX3JhdGlv bmFsIHNsb3BlOworCXN0cnVjdCBiY20yODM1X2lzcF9yYXRpb25hbCBzdHJlbmd0aDsKK307CisK Ky8qKgorICogc3RydWN0IGJjbTI4MzVfaXNwX3NoYXJwZW4gLSBTaGFycGVuIHBhcmFtZXRlcnMg c2V0IHdpdGggdGhlCisgKgkJCQlWNEwyX0NJRF9VU0VSX0JDTTI4MzVfSVNQX1NIQVJQRU4gY3Ry bC4KKyAqCisgKiBAZW5hYmxlZDoJRW5hYmxlIHNoYXJwZW5pbmcuCisgKiBAdGhyZXNob2xkOglU aHJlc2hvbGQgYXQgd2hpY2ggdG8gc3RhcnQgc2hhcnBlbmluZyBwaXhlbHMuCisgKiBAc3RyZW5n dGg6CVN0cmVuZ3RoIHdpdGggd2hpY2ggcGl4ZWwgc2hhcnBlbmluZyBpbmNyZWFzZXMuCisgKiBA bGltaXQ6CUxpbWl0IHRvIHRoZSBhbW91bnQgb2Ygc2hhcnBlbmluZyBhcHBsaWVkLgorICovCitz dHJ1Y3QgYmNtMjgzNV9pc3Bfc2hhcnBlbiB7CisJX191MzIgZW5hYmxlZDsKKwlzdHJ1Y3QgYmNt MjgzNV9pc3BfcmF0aW9uYWwgdGhyZXNob2xkOworCXN0cnVjdCBiY20yODM1X2lzcF9yYXRpb25h bCBzdHJlbmd0aDsKKwlzdHJ1Y3QgYmNtMjgzNV9pc3BfcmF0aW9uYWwgbGltaXQ7Cit9OworCisv KioKKyAqIGVudW0gYmNtMjgzNV9pc3BfZHBjX21vZGUgLSBkZWZlY3RpdmUgcGl4ZWwgY29ycmVj dGlvbiAoRFBDKSBzdHJlbmd0aC4KKyAqCisgKiBARFBDX01PREVfT0ZGOgkJTm8gRFBDLgorICog QERQQ19NT0RFX05PUk1BTDoJCU5vcm1hbCBEUEMuCisgKiBARFBDX01PREVfU1RST05HOgkJU3Ry b25nIERQQy4KKyAqLworZW51bSBiY20yODM1X2lzcF9kcGNfbW9kZSB7CisJRFBDX01PREVfT0ZG ID0gMCwKKwlEUENfTU9ERV9OT1JNQUwgPSAxLAorCURQQ19NT0RFX1NUUk9ORyA9IDIsCit9Owor CisvKioKKyAqIHN0cnVjdCBiY20yODM1X2lzcF9kcGMgLSBEZWZlY3RpdmUgcGl4ZWwgY29ycmVj dGlvbiAoRFBDKSBwYXJhbWV0ZXJzIHNldAorICoJCQkgICAgd2l0aCB0aGUgVjRMMl9DSURfVVNF Ul9CQ00yODM1X0lTUF9EUEMgY3RybC4KKyAqCisgKiBAZW5hYmxlZDoJRW5hYmxlIERQQy4KKyAq IEBzdHJlbmd0aDoJRFBDIHN0cmVuZ3RoIChzZWUgZW51bSAmYmNtMjgzNV9pc3BfZHBjX21vZGUp LgorICovCitzdHJ1Y3QgYmNtMjgzNV9pc3BfZHBjIHsKKwlfX3UzMiBlbmFibGVkOworCV9fdTMy IHN0cmVuZ3RoOworfTsKKworLyoKKyAqIElTUCBzdGF0aXN0aWNzIHN0cnVjdHVyZXMuCisgKgor ICogVGhlIGJjbTI4MzVfaXNwX3N0YXRzIHN0cnVjdHVyZSBpcyBnZW5lcmF0ZWQgYXQgdGhlIG91 dHB1dCBvZiB0aGUKKyAqIHN0YXRpc3RpY3Mgbm9kZS4gIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90 IGRpcmVjdGx5IG1hcCBvbnRvIHRoZSBzdGF0aXN0aWNzCisgKiBvdXRwdXQgb2YgdGhlIElTUCBI Vy4gIEluc3RlYWQsIHRoZSBNTUFMIGZpcm13YXJlIGNvZGUgbWFwcyB0aGUgSFcgc3RhdGlzdGlj cworICogdG8gdGhlIGJjbTI4MzVfaXNwX3N0YXRzIHN0cnVjdHVyZS4KKyAqLworI2RlZmluZSBE RUZBVUxUX0FXQl9SRUdJT05TX1ggMTYKKyNkZWZpbmUgREVGQVVMVF9BV0JfUkVHSU9OU19ZIDEy CisKKyNkZWZpbmUgTlVNX0hJU1RPR1JBTVMgMgorI2RlZmluZSBOVU1fSElTVE9HUkFNX0JJTlMg MTI4CisjZGVmaW5lIEFXQl9SRUdJT05TIChERUZBVUxUX0FXQl9SRUdJT05TX1ggKiBERUZBVUxU X0FXQl9SRUdJT05TX1kpCisjZGVmaW5lIEZMT0FUSU5HX1JFR0lPTlMgMTYKKyNkZWZpbmUgQUdD X1JFR0lPTlMgMTYKKyNkZWZpbmUgRk9DVVNfUkVHSU9OUyAxMgorCisvKioKKyAqIHN0cnVjdCBi Y20yODM1X2lzcF9zdGF0c19oaXN0IC0gSGlzdG9ncmFtIHN0YXRpc3RpY3MKKyAqCisgKiBAcl9o aXN0OglSZWQgY2hhbm5lbCBoaXN0b2dyYW0uCisgKiBAZ19oaXN0OglDb21iaW5lZCBncmVlbiBj aGFubmVsIGhpc3RvZ3JhbS4KKyAqIEBiX2hpc3Q6CUJsdWUgY2hhbm5lbCBoaXN0b2dyYW0uCisg Ki8KK3N0cnVjdCBiY20yODM1X2lzcF9zdGF0c19oaXN0IHsKKwlfX3UzMiByX2hpc3RbTlVNX0hJ U1RPR1JBTV9CSU5TXTsKKwlfX3UzMiBnX2hpc3RbTlVNX0hJU1RPR1JBTV9CSU5TXTsKKwlfX3Uz MiBiX2hpc3RbTlVNX0hJU1RPR1JBTV9CSU5TXTsKK307CisKKy8qKgorICogc3RydWN0IGJjbTI4 MzVfaXNwX3N0YXRzX3JlZ2lvbiAtIFJlZ2lvbiBzdW1zLgorICoKKyAqIEBjb3VudGVkOglUaGUg bnVtYmVyIG9mIDJ4MiBiYXllciB0aWxlcyBhY2N1bXVsYXRlZC4KKyAqIEBub3Rjb3VudGVkOglU aGUgbnVtYmVyIG9mIDJ4MiBiYXllciB0aWxlcyBub3QgYWNjdW11bGF0ZWQuCisgKiBAcl9zdW06 CVRvdGFsIHN1bSBvZiBjb3VudGVkIHBpeGVscyBpbiB0aGUgcmVkIGNoYW5uZWwgZm9yIGEgcmVn aW9uLgorICogQGdfc3VtOglUb3RhbCBzdW0gb2YgY291bnRlZCBwaXhlbHMgaW4gdGhlIGdyZWVu IGNoYW5uZWwgZm9yIGEgcmVnaW9uLgorICogQGJfc3VtOglUb3RhbCBzdW0gb2YgY291bnRlZCBw aXhlbHMgaW4gdGhlIGJsdWUgY2hhbm5lbCBmb3IgYSByZWdpb24uCisgKi8KK3N0cnVjdCBiY20y ODM1X2lzcF9zdGF0c19yZWdpb24geworCV9fdTMyIGNvdW50ZWQ7CisJX191MzIgbm90Y291bnRl ZDsKKwlfX3U2NCByX3N1bTsKKwlfX3U2NCBnX3N1bTsKKwlfX3U2NCBiX3N1bTsKK307CisKKy8q KgorICogc3RydWN0IGJjbTI4MzVfaXNwX3N0YXRzX2ZvY3VzIC0gRm9jdXMgc3RhdGlzdGljcy4K KyAqCisgKiBAY29udHJhc3RfdmFsOglGb2N1cyBtZWFzdXJlIC0gYWNjdW11bGF0ZWQgb3V0cHV0 IG9mIHRoZSBmb2N1cyBmaWx0ZXIuCisgKgkJCUluIHRoZSBmaXJzdCBkaW1lbnNpb24sIGluZGV4 IFswXSBjb3VudHMgcGl4ZWxzIGJlbG93IGEKKyAqCQkJcHJlc2V0IHRocmVzaG9sZCwgYW5kIGlu ZGV4IFsxXSBjb3VudHMgcGl4ZWxzIGFib3ZlIHRoZQorICoJCQl0aHJlc2hvbGQuICBJbiB0aGUg c2Vjb25kIGRpbWVuc2lvbiwgaW5kZXggWzBdIHVzZXMgdGhlCisgKgkJCWZpcnN0IHByZWRlZmlu ZWQgZmlsdGVyLCBhbmQgaW5kZXggWzFdIHVzZXMgdGhlIHNlY29uZAorICoJCQlwcmVkZWZpbmVk IGZpbHRlci4KKyAqIEBjb250cmFzdF92YWxfbnVtOglUaGUgbnVtYmVyIG9mIGNvdW50ZWQgcGl4 ZWxzIGluIHRoZSBhYm92ZSBhY2N1bXVsYXRpb24uCisgKi8KK3N0cnVjdCBiY20yODM1X2lzcF9z dGF0c19mb2N1cyB7CisJX191NjQgY29udHJhc3RfdmFsWzJdWzJdOworCV9fdTMyIGNvbnRyYXN0 X3ZhbF9udW1bMl1bMl07Cit9OworCisvKioKKyAqIHN0cnVjdCBiY20yODM1X2lzcF9zdGF0cyAt IElTUCBzdGF0aXN0aWNzLgorICoKKyAqIEB2ZXJzaW9uOgkJVmVyc2lvbiBvZiB0aGUgYmNtMjgz NV9pc3Bfc3RhdHMgc3RydWN0dXJlLgorICogQHNpemU6CQlTaXplIG9mIHRoZSBiY20yODM1X2lz cF9zdGF0cyBzdHJ1Y3R1cmUuCisgKiBAaGlzdDoJCUhpc3RvZ3JhbSBzdGF0aXN0aWNzIGZvciB0 aGUgZW50aXJlIGltYWdlLgorICogQGF3Yl9zdGF0czoJCVN0YXRpc3RpY3MgZm9yIHRoZSByZWdp b25zIGRlZmluZWQgZm9yIEFXQiBjYWxjdWxhdGlvbnMuCisgKiBAZmxvYXRpbmdfc3RhdHM6CVN0 YXRpc3RpY3MgZm9yIGFyYml0cmFyaWx5IHBsYWNlZCAoZmxvYXRpbmcpIHJlZ2lvbnMuCisgKiBA YWdjX3N0YXRzOgkJU3RhdGlzdGljcyBmb3IgdGhlIHJlZ2lvbnMgZGVmaW5lZCBmb3IgQUdDIGNh bGN1bGF0aW9ucy4KKyAqIEBmb2N1c19zdGF0czoJRm9jdXMgZmlsdGVyIHN0YXRpc3RpY3MgZm9y IHRoZSBmb2N1cyByZWdpb25zLgorICovCitzdHJ1Y3QgYmNtMjgzNV9pc3Bfc3RhdHMgeworCV9f dTMyIHZlcnNpb247CisJX191MzIgc2l6ZTsKKwlzdHJ1Y3QgYmNtMjgzNV9pc3Bfc3RhdHNfaGlz dCBoaXN0W05VTV9ISVNUT0dSQU1TXTsKKwlzdHJ1Y3QgYmNtMjgzNV9pc3Bfc3RhdHNfcmVnaW9u IGF3Yl9zdGF0c1tBV0JfUkVHSU9OU107CisJc3RydWN0IGJjbTI4MzVfaXNwX3N0YXRzX3JlZ2lv biBmbG9hdGluZ19zdGF0c1tGTE9BVElOR19SRUdJT05TXTsKKwlzdHJ1Y3QgYmNtMjgzNV9pc3Bf c3RhdHNfcmVnaW9uIGFnY19zdGF0c1tBR0NfUkVHSU9OU107CisJc3RydWN0IGJjbTI4MzVfaXNw X3N0YXRzX2ZvY3VzIGZvY3VzX3N0YXRzW0ZPQ1VTX1JFR0lPTlNdOworfTsKKworI2VuZGlmIC8q IF9fQkNNMjgzNV9JU1BfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92NGwy LWNvbnRyb2xzLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdjRsMi1jb250cm9scy5oCmluZGV4IGI1 ZTdkMDgyYjhhZC4uMzE2MDZkNDJlYzU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgv djRsMi1jb250cm9scy5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC92NGwyLWNvbnRyb2xzLmgK QEAgLTIxNyw2ICsyMTcsNyBAQCBlbnVtIHY0bDJfY29sb3JmeCB7CiAgKiBUaGUgYmFzZSBmb3Ig QWxsZWdybyBkcml2ZXIgY29udHJvbHMuCiAgKiBXZSByZXNlcnZlIDE2IGNvbnRyb2xzIGZvciB0 aGlzIGRyaXZlci4KICAqLworCiAjZGVmaW5lIFY0TDJfQ0lEX1VTRVJfQUxMRUdST19CQVNFCQko VjRMMl9DSURfVVNFUl9CQVNFICsgMHgxMTcwKQogCiAvKgpAQCAtMjMxLDYgKzIzMiwxMSBAQCBl bnVtIHY0bDJfY29sb3JmeCB7CiAgKi8KICNkZWZpbmUgVjRMMl9DSURfVVNFUl9EVzEwMF9CQVNF CQkoVjRMMl9DSURfVVNFUl9CQVNFICsgMHgxMTkwKQogCisvKiBUaGUgYmFzZSBmb3IgdGhlIGJj bTI4MzUtaXNwIGRyaXZlciBjb250cm9scy4KKyAqIFdlIHJlc2VydmUgMTYgY29udHJvbHMgZm9y IHRoaXMgZHJpdmVyLgorICovCisjZGVmaW5lIFY0TDJfQ0lEX1VTRVJfQkNNMjgzNV9JU1BfQkFT RQkJKFY0TDJfQ0lEX1VTRVJfQkFTRSArIDB4MTFhMCkKKwogLyogTVBFRy1jbGFzcyBjb250cm9s IElEcyAqLwogLyogVGhlIE1QRUcgY29udHJvbHMgYXJlIGFwcGxpY2FibGUgdG8gYWxsIGNvZGVj IGNvbnRyb2xzCiAgKiBhbmQgdGhlICdNUEVHJyBwYXJ0IG9mIHRoZSBkZWZpbmUgaXMgaGlzdG9y aWNhbCAqLwotLSAKMi4zNy4zCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5l bEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4v bGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=