From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id B38556E3C7 for ; Mon, 12 Aug 2019 08:47:24 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Mon, 12 Aug 2019 10:47:17 +0200 Message-Id: <20190812084718.9999-2-zbigniew.kempczynski@intel.com> In-Reply-To: <20190812084718.9999-1-zbigniew.kempczynski@intel.com> References: <20190812084718.9999-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v4 1/2] Introduce multi-device selection API List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: Daniel Vetter , Petri Latvala List-ID: Q2hhbmdlIGFkZHMgZGV2aWNlIHNlbGVjdGlvbiBiYXNlZCBvbiBzY2FubmluZyBkcm0gc3Vic3lz dGVtCnVzaW5nIHVkZXYgbGlicmFyeS4KClRvb2wgJ2xzZ3B1JyB3aGljaCB1c2VzIGRldmljZSBz Y2FubmluZyBhbmQgc2VsZWN0aW9uIGZlYXR1cmUgd2FzIGFkZGVkLgoKU2lnbmVkLW9mZi1ieTog WmJpZ25pZXcgS2VtcGN6ecWEc2tpIDx6Ymlnbmlldy5rZW1wY3p5bnNraUBpbnRlbC5jb20+CkNj OiBBcmthZGl1c3ogSGlsZXIgPGFya2FkaXVzei5oaWxlckBpbnRlbC5jb20+CkNjOiBEYW5pZWwg VmV0dGVyIDxkYW5pZWxAZmZ3bGwuY2g+CkNjOiBQZXRyaSBMYXR2YWxhIDxwZXRyaS5sYXR2YWxh QGludGVsLmNvbT4KLS0tCiAuLi4vaWd0LWdwdS10b29scy9pZ3QtZ3B1LXRvb2xzLWRvY3MueG1s ICAgICAgfCAgICAxICsKIGxpYi9NYWtlZmlsZS5zb3VyY2VzICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgIDIgKwogbGliL2lndF9kZXZpY2Vfc2Nhbi5jICAgICAgICAgICAgICAgICAgICAg ICAgIHwgMTMxOCArKysrKysrKysrKysrKysrKwogbGliL2lndF9kZXZpY2Vfc2Nhbi5oICAgICAg ICAgICAgICAgICAgICAgICAgIHwgICA2OSArCiBsaWIvbWVzb24uYnVpbGQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgICAxICsKIHRvb2xzL01ha2VmaWxlLnNvdXJjZXMgICAgICAg ICAgICAgICAgICAgICAgICB8ICAgIDEgKwogdG9vbHMvbHNncHUuYyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgIDE4MyArKysKIHRvb2xzL21lc29uLmJ1aWxkICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAgIDEgKwogOCBmaWxlcyBjaGFuZ2VkLCAxNTc2IGluc2VydGlv bnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaWd0X2RldmljZV9zY2FuLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBsaWIvaWd0X2RldmljZV9zY2FuLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29s cy9sc2dwdS5jCgpkaWZmIC0tZ2l0IGEvZG9jcy9yZWZlcmVuY2UvaWd0LWdwdS10b29scy9pZ3Qt Z3B1LXRvb2xzLWRvY3MueG1sIGIvZG9jcy9yZWZlcmVuY2UvaWd0LWdwdS10b29scy9pZ3QtZ3B1 LXRvb2xzLWRvY3MueG1sCmluZGV4IGFjODMyNzJmLi40YjNjMzhhZiAxMDA2NDQKLS0tIGEvZG9j cy9yZWZlcmVuY2UvaWd0LWdwdS10b29scy9pZ3QtZ3B1LXRvb2xzLWRvY3MueG1sCisrKyBiL2Rv Y3MvcmVmZXJlbmNlL2lndC1ncHUtdG9vbHMvaWd0LWdwdS10b29scy1kb2NzLnhtbApAQCAtMjMs NiArMjMsNyBAQAogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9pZ3RfY29yZS54bWwiLz4KICAg ICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvaWd0X2RlYnVnZnMueG1sIi8+CiAgICAgPHhpOmluY2x1 ZGUgaHJlZj0ieG1sL2lndF9kZXZpY2UueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1s L2lndF9kZXZpY2Vfc2Nhbi54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvaWd0X2Ry YXcueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF9kdW1teWxvYWQueG1sIi8+ CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF9mYi54bWwiLz4KZGlmZiAtLWdpdCBhL2xp Yi9NYWtlZmlsZS5zb3VyY2VzIGIvbGliL01ha2VmaWxlLnNvdXJjZXMKaW5kZXggZTE2ZGU4NmUu LmMzODNhODE3IDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUuc291cmNlcworKysgYi9saWIvTWFr ZWZpbGUuc291cmNlcwpAQCAtMjUsNiArMjUsOCBAQCBsaWJfc291cmNlX2xpc3QgPQkgCVwKIAlp Z3RfZGVidWdmcy5oCQlcCiAJaWd0X2RldmljZS5jCQlcCiAJaWd0X2RldmljZS5oCQlcCisJaWd0 X2RldmljZV9zY2FuLmMJXAorCWlndF9kZXZpY2Vfc2Nhbi5oCVwKIAlpZ3RfYXV4LmMJCVwKIAlp Z3RfYXV4LmgJCVwKIAlpZ3RfY29sb3JfZW5jb2RpbmcuYwlcCmRpZmYgLS1naXQgYS9saWIvaWd0 X2RldmljZV9zY2FuLmMgYi9saWIvaWd0X2RldmljZV9zY2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAuLjRmYzE2NWIyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2lndF9k ZXZpY2Vfc2Nhbi5jCkBAIC0wLDAgKzEsMTMxOCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE5 IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJh Z3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y dGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENP UFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVS CisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNP RlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSAiaWd0LmgiCisjaW5jbHVkZSAiaWd0X3N5c2Zz LmgiCisjaW5jbHVkZSAiaWd0X2RldmljZS5oIgorI2luY2x1ZGUgImlndF9kZXZpY2Vfc2Nhbi5o IgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxsaWJ1ZGV2Lmg+CisjaW5jbHVkZSA8bGlu dXgvbGltaXRzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMu aD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisvKioKKyAqIFNF Q1RJT046aWd0X2RldmljZV9zY2FuCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IE11bHRpLWRldmlj ZSBzY2FubmluZyBhbmQgc2VsZWN0aW9uCisgKiBAdGl0bGU6IE11bHRpLWRldmljZSBzZWxlY3Rp b24KKyAqIEBpbmNsdWRlOiBpZ3QuaAorICoKKyAqICMgRGV2aWNlIHNjYW5uaW5nCisgKgorICog RGV2aWNlIHNjYW5uaW5nIGl0ZXJhdGVzIG92ZXIgZHJtIHN1YnN5c3RlbSB1c2luZyB1ZGV2IGxp YnJhcnkKKyAqIHRvIGFjcXVpcmUgZHJtIGRldmljZXMuCisgKiBGb3IgZWFjaCBkcm0gZGV2aWNl IHdlIGFsc28gZ2V0IGFuZCBzdG9yZSBpdHMgcGFyZW50IGluIGEgZGV2aWNlIGFycmF5CisgKiB0 byBhbGxvdyBkZXZpY2Ugc2VsZWN0aW9uIGluIG1vcmUgY29udGV4dHVhbCB3YXkuCisgKgorICog UGFyZW50IGRldmljZXMgYXJlIGJ1cyBkZXZpY2VzIChsaWtlIHBjaSwgcGxhdGZvcm0sIGV0Yy4p IGFuZCBjb250YWluIGEgbG90CisgKiBvZiB1c2FibGUgaW5mb3JtYXRpb24gY29tcGFyaW5nIHRv IGRybSBkZXZpY2UuCisgKgorICogVWRldiBrZWVwcyBwcm9wZXJ0aWVzIGFuZCBzeXNhdHRycyBm b3IgdGhlIGRldmljZSBhcyBhIGxpc3Qgd2hhdCBpcyBub3QKKyAqIGNvbnZpbmllbnQgZm9yIGtl eS92YWx1ZSBzZWFyY2hpbmcuIFNvIHVkZXYgZGV2aWNlIHByb3BlcnRpZXMgYW5kIHN5c2F0dHJz CisgKiBhcmUgcmV3cml0dGVuIHRvIGludGVybmFsIGhhc2ggdGFibGVzIGluIGlndF9kZXZpY2Ug c3RydWN0dXJlLgorICoKKyAqICMgRmlsdGVycworICoKKyAqIERldmljZSBzZWxlY3Rpb24gY2Fu IGJlIGRvbmUgdXNpbmcgZmlsdGVycy4gRmlsdGVycyBhbGxvd3Mgc29waGlzdGljYXRlZAorICog ZGV2aWNlIG1hdGNoaW5nIGFuZCBzZWxlY3Rpb24uIFByZXZpb3VzbHkgbWVudGlvbmVkIHByb3Bl cnRpZXMgYW5kIHN5c2F0dHJzCisgKiBjb2xsZWN0ZWQgaW4gaWd0X2RldmljZSBoYXNoIHRhYmxl cyBzaW1wbGlmeSB3cml0aW5nIGZpbHRlciBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBEaXJlY3Qg ZGV2aWNlIHNlbGVjdGlvbiBmaWx0ZXIKKyAqIGlzIHNwZWNpYWwgZmlsdGVyIGFuZCBpdCBpcyBj aGVja2VkIGZpcnN0LiBUaGVuIGNvbnRleHR1YWwgZmlsdGVyIGlzIGNob3NlbgorICogZGVwZW5k aW5nIG9uIGZpbHRlciBuYW1lLgorICoKKyAqIERpcmVjdCBkZXZpY2Ugc2VsZWN0aW9uIGZpbHRl ciBtdXN0IGJlOgorICoKKyAqIHxbPCEtLSBsYW5ndWFnZT0icGxhaW4iIC0tPgorICogc3Vic3lz dGVtOi9zeXMKKyAqIF18CisgKgorICogU28sIHdoZW4gdXNlciBwYXNzZXMgZmlsdGVyIHdoaWNo IGxvb2tzIGxpa2UgZm9sbG93czoKKyAqIHxbPCEtLSBsYW5ndWFnZT0icGxhaW4iIC0tPgorICog LSBkcm06L3N5cy9kZXZpY2VzL3BjaTAwMDA6MDAvMDAwMDowMDowMi4wL2RybS9jYXJkMAorICog LSBwY2k6L3N5cy9kZXZpY2VzL3BjaTAwMDA6MDAvMDAwMDowMDowMi4wCisgKiAtIHBsYXRmb3Jt Oi9zeXMvZGV2aWNlcy9wbGF0Zm9ybS92Z2VtCisgKiBdfAorICoKKyAqIGRldmljZSBmcm9tIGFy cmF5IHdoaWNoIGhhcyBzdWJzeXN0ZW0gYW5kIHN5cyBwYXRoIHdpbGwgYmUgcmV0dXJuZWQuCisg KgorICogV2hlbiAvc3lzIGlzIG5vdCBzcGVjaWZpZWQgYWZ0ZXIgY29sb24gY29udGV4dHVhbCBm aWx0ZXJzIGFyZSB0YWtlbgorICogaW50byBhY2NvdW50LiBEcm0gZGV2aWNlIG9jY3VycyBpbiB0 aGUgc3lzdGVtIHdoZW4gYXBwcm9wcmlhdGUgbW9kdWxlCisgKiBpcyBsb2FkZWQgYW5kIGRldmlj ZSBpcyBkZXRlY3RlZCAob3IgZXhwb3NlZCBmb3IgcGxhdGZvcm0gZGV2aWNlcykuIExvYWRpbmcK KyAqIGRyaXZlcnMgaW4gZGlmZmVyZW50IG9yZGVyIGNhbiBiZSBwcm9ibGVtYXRpYyBmcm9tIENJ IHBvaW50IG9mIHZpZXcsIHdoZXJlCisgKiBleHBlY3RhdGlvbiBpcyB0byBnZXQgc2FtZSBkZXZp Y2UgZXNwZWNpYWxseSB3aGVuIG11bHRpcGxlIGdwdSBkZXZpY2VzCisgKiBleGlzdHMgaW4gdGhl IHN5c3RlbS4gRm9yIHN1Y2ggZGV2aWNlcyBpdHMgcGFyZW50IGxvY2F0aW9uIG9uIHBjaSBidXMK KyAqIGlzIGNvbnN0YW50IGFuZCBhbGxvd3MgYXBwcm9wcmlhdGUgZGV2aWNlIHNlbGVjdGlvbiB1 c2luZyBmb3IgZXhhbXBsZQorICogdmVuZG9yIC8gZGV2aWNlIGlkcy4KKyAqCisgKiBGb3IgdGVz dHMgd2hpY2ggb3BlbnMgbW9yZSB0aGFuIG9uZSBkZXZpY2UgZGV2aWNlIGZpbHRlciBjb2xsZWN0 aW9uIEFQSQorICogY2FuIGJlIHVzZWQuIFlvdSBjYW4gYWRkIGZpbHRlciB0byB0aGUgYXJyYXkg dXNpbmcgaWd0X2RldmljZV9maWx0ZXJfYWRkKCksCisgKiBnZXQgbnRoIGZpbHRlciBzdG9yZWQg dXNpbmcgaWd0X2RldmljZV9maWx0ZXJfZ2V0KCkgYW5kIHJldHVybgorICogI2lndF9kZXZpY2Vf Y2FyZCB1c2luZyBmaWx0ZXIgaW4gaWd0X2RldmljZV9jYXJkX21hdGNoKCkuCisgKgorICogSW1w bGVtZW50ZWQgZmlsdGVyczoKKyAqCisgKiAtIGRybTogZ2V0IGRybSAvZGV2L2RyaS8uLi4gZGV2 aWNlIGRpcmVjdGx5CisgKgorICogICB8WzwhLS0gbGFuZ3VhZ2U9InBsYWluIiAtLT4KKyAqICAg ZHJtOi9kZXYvZHJpLy4uLgorICogICBdfAorICoKKyAqIC0gcGNpOiBzZWxlY3QgZGV2aWNlIHVz aW5nIHBjaSBwcm9wZXJ0aWVzCisgKiAgIHxbPCEtLSBsYW5ndWFnZT0icGxhaW4iIC0tPgorICog ICBwY2k6W3ZlbmRvcj0lMDR4L25hbWVdWyxkZXZpY2U9JTA0eF1bLGNhcmQ9JWRdCisgKiAgIF18 CisgKgorICogICBGaWx0ZXIgYWxsb3dzIGRldmljZSBzZWxlY3Rpb24gdXNpbmcgdmVuZG9yICho ZXggb3IgbmFtZSksIGRldmljZSBpZAorICogICAoaGV4KSBhbmQgbnRoLWNhcmQgZnJvbSBhbGwg bWF0Y2hlcy4gRm9yIGV4YW1wbGUgaWYgdGhlcmUncmUgNCBwY2kKKyAqICAgY2FyZHMgaW5zdGFs bGVkIChsZXQgdHdvIGNhcmRzIGhhdmUgMTIzNCBhbmQgb3RoZXIgdHdvIDEyMzUgZGV2aWNlIGlk LAorICogICBhbGwgb2YgdGhlbSBvZiB2ZW5kb3IgSW50ZWwpIHlvdSBjYW4gc2VsZWN0IG9uZSB1 c2luZzoKKyAqCisgKiAgIHxbPCEtLSBsYW5ndWFnZT0icGxhaW4iIC0tPgorICogICBwY2k6dmVu ZG9yPUludGVsLGRldmljZT0xMjM0LGNhcmQ9MAorICogICBdfAorICoKKyAqICAgb3IKKyAqCisg KiAgIHxbPCEtLSBsYW5ndWFnZT0icGxhaW4iIC0tPgorICogICBwY2k6dmVuZG9yPTgwODYsZGV2 aWNlPTEyMzQsY2FyZD0wCisgKiAgIF18CisgKgorICogICBUaGlzIHRha2VzIGZpcnN0IGRldmlj ZSB3aXRoIDEyMzQgaWQgZm9yIEludGVsIHZlbmRvciAoODA4NikuCisgKgorICogICB8WzwhLS0g bGFuZ3VhZ2U9InBsYWluIiAtLT4KKyAqICAgcGNpOnZlbmRvcj1JbnRlbCxkZXZpY2U9MTIzNCxj YXJkPTEKKyAqICAgXXwKKyAqCisgKiAgIG9yCisgKgorICogICB8WzwhLS0gbGFuZ3VhZ2U9InBs YWluIiAtLT4KKyAqICAgcGNpOnZlbmRvcj04MDg2LGRldmljZT0xMjM0LGNhcmQ9MQorICogICBd fAorICoKKyAqICAgSXQgc2VsZWN0cyBzZWNvbmQgb25lLgorICoKKyAqICAgQXMgb3JkZXIgb24g cGNpIGJ1cyBkb2Vzbid0IGNoYW5nZSAodW5sZXNzIHlvdSdsbCBhZGQgbmV3IGRldmljZSBvcgor ICogICByZW9yZGVyIGV4aXN0aW5nIG9uZSkgZGV2aWNlIHNlbGVjdGlvbiB1c2luZyB0aGlzIGZp bHRlciB3aWxsIGFsd2F5cworICogICByZXR1cm4geW91IHNhbWUgZGV2aWNlIHJlZ2FyZGxlc3Mg bW9kdWxlIGxvYWRpbmcgdGltZS4KKyAqCisgKiAtIHZnZW06IHNlbGVjdCB2aXJ0dWFsIGdlbSBk ZXZpY2UKKyAqCisgKiAgIHxbPCEtLSBsYW5ndWFnZT0icGxhaW4iIC0tPgorICogICB2Z2VtOltj YXJkPSVkXQorICogICBdfAorICoKKyAqICAgRm9yIGV4YW1wbGU6CisgKgorICogICB8WzwhLS0g bGFuZ3VhZ2U9InBsYWluIiAtLT4KKyAqICAgdmdlbToKKyAqICAgdmdlbTpjYXJkPTAKKyAqICAg XXwKKyAqCisgKiAgIEJvdGggc2VsZWN0cyBmaXJzdCB2Z2VtIGRldmljZSAobm8gaWRlYSBpZiBt b3JlIHRoYW4gb25lIGRldmljZSB3aWxsCisgKiAgIGJlIHZpc2libGUsIGlmIHllcyB1c2UgY2Fy ZD0gYXJndW1lbnQgdG8gcG9pbnQgcmlnaHQgb25lKS4KKyAqCisgKiAtIHZrbXM6IHNlbGVjdCB2 aXJ0dWFsIGttcyBkZXZpY2UKKyAqCisgKiAgIHxbPCEtLSBsYW5ndWFnZT0icGxhaW4iIC0tPgor ICogICB2a21zOltjYXJkPSVkXQorICogICBdfAorICoKKyAqICAgRm9yIGV4YW1wbGU6CisgKgor ICogICB8WzwhLS0gbGFuZ3VhZ2U9InBsYWluIiAtLT4KKyAqICAgdmttczoKKyAqICAgdmttczpj YXJkPTAKKyAqICAgXXwKKyAqCisgKiAgIEJvdGggc2VsZWN0cyBmaXJzdCB2a21zIGRldmljZS4g U2FtZSBhcyBmb3IgdmdlbSBJIGFzc3VtZSBtb3JlIHRoYW4KKyAqICAgb25lIGRldmljZSBjYW4g YXBwZWFyIGluIHRoZSBmdXR1cmUuCisgKgorICogLSB2YzQ6IHNlbGVjdCBWQzQgZGV2aWNlCisg KgorICogICB8WzwhLS0gbGFuZ3VhZ2U9InBsYWluIiAtLT4KKyAqICAgdmM0OltjYXJkPSVkXQor ICogICBdfAorICoKKyAqICAgRm9yIGV4YW1wbGU6CisgKgorICogICB8WzwhLS0gbGFuZ3VhZ2U9 InBsYWluIiAtLT4KKyAqICAgdmM0OgorICogICB2YzQ6Y2FyZD0wCisgKiAgIF18CisgKgorICog ICBCb3RoIHNlbGVjdHMgZmlyc3QgVkM0IGRldmljZS4gQXQgdGhlIG1vbWVudCBSYXNwZXJyeSBQ SSBoYXMgb25seQorICogICBvbmUgZ3B1LCBidXQgZmlsdGVyIGlzIHJlYWR5IGlmIHRoZXJlIHdp bGwgYmUgbW9yZS4KKyAqCisgKiAjIGxzZ3B1CisgKgorICogU2Nhbm5lZCBkZXZpY2VzIGNhbiBi ZSBkaXNwbGF5ZWQgdXNpbmcgJ2xzZ3B1JyB0b29sLiBUb29sIGFsc28gZGlzcGxheXMKKyAqIHBy b3BlcnRpZXMgYW5kIHN5c2F0dHJzICgtRCBzd2l0Y2gsIG1lYW5zIGRldGFpbCkgd2hpY2ggY2Fu IGJlIHVzZWQgZHVyaW5nCisgKiBmaWx0ZXIgaW1wbGVtZW50YXRpb24uCisgKgorICogVG9vbCBj YW4gYWxzbyBiZSB1c2VkIHRvIGNoZWNrIGRvZXMgdGhlIGltcGxlbWVudGVkIGZpbHRlciB3b3Jr cyBhcyBleHBlY3RlZC4KKyAqIFRvIHNlbGVjdCBkZXZpY2UgdXNpbmcgZmlsdGVyIHVzZSAnLWQn IG9yICctLWRldmljZScgYXJndW1lbnQgbGlrZToKKyAqCisgKiB8WzwhLS0gbGFuZ3VhZ2U9InBs YWluIiAtLT4KKyAqIC4vbHNncHUgLWQgJ3BjaTp2ZW5kb3I9SW50ZWwnCisgKiA9PT0gRGV2aWNl IGZpbHRlciBsaXN0ID09PQorICogWyAwXTogcGNpOnZlbmRvcj1JbnRlbAorCisgKiA9PT0gVGVz dGluZyBkZXZpY2Ugb3BlbiA9PT0KKyAqIHN1YnN5c3RlbSAgIDogcGNpCisgKiBjaGlwc2V0ICAg ICA6IDEKKyAqIGRybSBjYXJkICAgIDogL2Rldi9kcmkvY2FyZDAKKyAqIGRybSByZW5kZXIgIDog L2Rldi9kcmkvcmVuZGVyRDEyOAorICogRGV2aWNlIC9kZXYvZHJpL2NhcmQwIHN1Y2Nlc3NmdWxs eSBvcGVuZWQKKyAqIERldmljZSAvZGV2L2RyaS9yZW5kZXJEMTI4IHN1Y2Nlc3NmdWxseSBvcGVu ZWQKKyAqIF18CisgKgorICogQXBhcnQgb2Ygc2VsZWN0aW5nIGRldmljZSBsc2dwdSB0cnkgdG8g b3BlbiBjYXJkIGFuZCByZW5kZXIgbm9kZXMuCisqLworCisvLyNkZWZpbmUgREVCVUdfREVWSUNF X1NDQU4KKyNpZmRlZiBERUJVR19ERVZJQ0VfU0NBTgorI2RlZmluZSBEQkcoLi4uKSBcCit7IFwK KwlzdHJ1Y3QgdGltZXZhbCB0bTsgXAorCWdldHRpbWVvZmRheSgmdG0sIE5VTEwpOyBcCisJcHJp bnRmKCIlMTBsZC4lMDNsZDogIiwgdG0udHZfc2VjLCB0bS50dl91c2VjKTsgXAorCXByaW50Zihf X1ZBX0FSR1NfXyk7IFwKKwl9CisKKyNlbHNlCisjZGVmaW5lIERCRyguLi4pIHt9CisjZW5kaWYK KworI2RlZmluZSBzdHJlcXVhbCh4LCB5KSAoKHgpICYmICh5KSAmJiAhc3RyY21wKCh4KSwgKHkp KSkKKyNkZWZpbmUgSUdUX0RSTV9QQVRIICIvZGV2L2RyaSIKKworc3RhdGljIEdIYXNoVGFibGUg KnN5c2F0dHJzX2JsYWNrbGlzdF9odDsgIC8vc3lzYXR0cnMgd2UgZG9uJ3Qgd2FudCB0byByZWFk CitzdGF0aWMgR0hhc2hUYWJsZSAqZ3B1X3ZlbmRvcl9odDsgICAgICAgICAgLy9zZWFyY2ggaWQg LT4gdmVuZG9yX3NwZWMgbWFwcGluZworc3RhdGljIEdIYXNoVGFibGUgKmZpbHRlcl9kZWZpbml0 aW9uX2h0OyAgIC8vc3VwcG9ydGVkIGZpbHRlcnMgKHBjaT0uLi4sIGV0Yy4pCisKKy8qIEdlbmVy aWMgbmFtZS0+dmFsdWUgc3RydWN0ICovCitzdHJ1Y3QgbmFtZV92YWx1ZSB7CisJY29uc3QgY2hh ciAqbmFtZTsKKwlncG9pbnRlciAqdmFsdWU7Cit9OworCisvKiBWZW5kb3Igc3BlY2lmaWMgZGF0 YSAqLworc3RydWN0IHZlbmRvcl9zcGVjIHsKKwljb25zdCBjaGFyICp2ZW5kb3I7CisJY29uc3Qg Y2hhciAqbWF0Y2g7CisJaW50IGNoaXBzZXQ7Cit9OworCitzdHJ1Y3QgaWd0X2RldmljZSB7CisJ LyogRmlsbGVkIGZvciBkcm0gZGV2aWNlcyAqLworCXN0cnVjdCBpZ3RfZGV2aWNlICpwYXJlbnQ7 CisKKwkvKiBQb2ludCB0byB2ZW5kb3Igc3BlYyBpZiBjYW4gYmUgZm91bmQgKi8KKwlzdHJ1Y3Qg dmVuZG9yX3NwZWMgKnZzOworCisJLyogUHJvcGVydGllcyAvIHN5c2F0dHJzIHJld3JpdGVuIGZy b20gdWRldiBsaXN0cyAqLworCUdIYXNoVGFibGUgKnByb3BzX2h0OworCUdIYXNoVGFibGUgKmF0 dHJzX2h0OworCisJLyogTW9zdCB1c2FibGUgdmFyaWFibGVzIGZyb20gdWRldiBkZXZpY2UgKi8K KwljaGFyICpzdWJzeXN0ZW07CisJY2hhciAqc3lzcGF0aDsKKwljaGFyICpkZXZub2RlOworCisJ LyogL2Rldi9kcmkvLi4uIHBhdGhzICovCisJY2hhciAqZHJtX2NhcmQ7CisJY2hhciAqZHJtX3Jl bmRlcjsKKworCS8qIEZvciBwY2kgc3Vic3lzdGVtICovCisJY2hhciAqdmVuZG9yOworCWNoYXIg KmRldmljZTsKK307CisKKy8qIFNjYW5uZWQgZGV2aWNlcyAqLworc3RydWN0IGlndF9kZXZpY2Vz IHsKKwlHUHRyQXJyYXkgKmRldnM7CQkvL2FsbCBkZXZpY2VzCisJR1B0ckFycmF5ICp2aWV3OwkJ Ly9maWx0ZXJlZCB2aWV3CisJYm9vbCBkZXZzX3NjYW5uZWQ7Cit9OworCisvKiBTY2FubmVkIGRl dmljZXMgaG9sZGVyICovCitzdGF0aWMgc3RydWN0IGlndF9kZXZpY2VzIGlndF9kZXZzOworCitz dGF0aWMgc3RydWN0IHZlbmRvcl9zcGVjIHZfaW50ZWwgID0geyAudmVuZG9yID0gIkludGVsIiwK KwkJCQkgICAgICAgLmNoaXBzZXQgPSBEUklWRVJfSU5URUwKKwkJCQkgICAgIH07CitzdGF0aWMg c3RydWN0IHZlbmRvcl9zcGVjIHZfYW1kICAgID0geyAudmVuZG9yID0gIkFNRCIsCisJCQkJICAg ICAgIC5jaGlwc2V0ID0gRFJJVkVSX0FNREdQVQorCQkJCSAgICAgfTsKK3N0YXRpYyBzdHJ1Y3Qg dmVuZG9yX3NwZWMgdl92Z2VtICAgPSB7IC52ZW5kb3IgPSAiVmlydHVhbC1HRU0iLAorCQkJCSAg ICAgICAuY2hpcHNldCA9IERSSVZFUl9WR0VNCisJCQkJICAgICB9Oworc3RhdGljIHN0cnVjdCB2 ZW5kb3Jfc3BlYyB2X3ZjNCAgICA9IHsgLnZlbmRvciA9ICJCcm9hZGNvbSIsCisJCQkJICAgICAg IC5jaGlwc2V0ID0gRFJJVkVSX1ZDNAorCQkJCSAgICAgfTsKKworLyogTWFwcGluZyB2ZW5kb3Ig aWQgPT4gdmVuZG9yX3NwZWMgc2hvdWxkIGJlIHVuaXF1ZSAodmVuZG9yIHN0cmluZyBtYXRjaGlu ZworICogaXMgd3JpdHRlbiBhcm91bmQgdGhpcykuCisgKgorICogS2V5cyBtdXN0IGJlIGRlZmlu ZWQgYXMgZm9sbG93czoKKyAqIFBDSSBkZXZpY2VzOiBQQ0lfU0xPVF9JRCAtPiB2ZW5kb3Jfc3Bl Yy4KKyovCitzdHJ1Y3QgbmFtZV92YWx1ZSBncHVfdmVuZG9yX2xpc3RbXSA9IHsKKwl7ICI4MDg2 IiwgKGdwb2ludGVyKSAmdl9pbnRlbCB9LAorCXsgIjEwMDIiLCAoZ3BvaW50ZXIpICZ2X2FtZCB9 LAorCXsgTlVMTCwgfSwKK307CisKKy8qIEdlbmVyaWMgaGFzaCB0YWJsZSBmaWxsIGZ1bmN0aW9u LCByZXF1aXJlcyBuYW1lIC8gdmFsdWUgcHRycyBhcnJheSAqLworc3RhdGljIHZvaWQgZmlsbF9o dChHSGFzaFRhYmxlICoqaHQsIHN0cnVjdCBuYW1lX3ZhbHVlICpkYXRhKQoreworCWlmICgqaHQp CisJCXJldHVybjsKKworCSpodCA9IGdfaGFzaF90YWJsZV9uZXcoZ19zdHJfaGFzaCwgZ19zdHJf ZXF1YWwpOworCWlndF9hc3NlcnQoKmh0KTsKKworCXdoaWxlIChkYXRhLT5uYW1lKSB7CisJCWdf aGFzaF90YWJsZV9pbnNlcnQoKmh0LAorCQkJCSAgICAoZ3BvaW50ZXIpIGRhdGEtPm5hbWUsCisJ CQkJICAgIGRhdGEtPnZhbHVlKTsKKwkJZGF0YSsrOworCX0KK30KKworI2RlZmluZSBnZXRfdmVu ZG9yX3NwZWMocHJvcCkgXAorCWdfaGFzaF90YWJsZV9sb29rdXAoZ3B1X3ZlbmRvcl9odCwgcHJv cCkKKworLyogR28gdGhyb3VnaCB3aG9sZSB2ZW5kb3IgbGlzdCBhbmQgY29tcGFyZSBhZ2FpbnN0 IHZlbmRvciBmaWVsZC4KKyAqIFVzZWQgbW9zdGx5IHdpdGggdmVuZG9yPS4uLiBmaWx0ZXIgcGFy YW1ldGVyIHdoZW4gUENJIGlkIGlzIG5vdCBtYXRjaGVkLgorKi8KK3N0YXRpYyBjb25zdCBjaGFy ICpnZXRfcGNpX3ZlbmRvcl9pZF9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0 IG5hbWVfdmFsdWUgKmRhdGEgPSAmZ3B1X3ZlbmRvcl9saXN0WzBdOworCisJd2hpbGUgKGRhdGEt Pm5hbWUpIHsKKwkJc3RydWN0IHZlbmRvcl9zcGVjICp2cyA9IChzdHJ1Y3QgdmVuZG9yX3NwZWMg KikgZGF0YS0+dmFsdWU7CisJCWlmICghc3RyY2FzZWNtcChuYW1lLCB2cy0+dmVuZG9yKSkKKwkJ CXJldHVybiBkYXRhLT5uYW1lOworCQlkYXRhKys7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisK Ky8qIFJlYWRpbmcgc3lzYXR0ciB2YWx1ZXMgY2FuIHRha2UgdGltZSAoZXZlbiBzZWNvbmRzKSwK KyAqIHdlIHdhbnQgdG8gYXZvaWQgcmVhZGluZyBzdWNoIGtleXMuCisqLworc3RhdGljIHZvaWQg cG9wdWxhdGVfYmxhY2tsaXN0X2tleXModm9pZCkKK3sKKwljb25zdCBjaGFyICprZXlzW10gPSB7 ICJjb25maWciLCAibW9kYWxpYXMiLCAibW9kZXMiLAorCQkJICAgICAgICJyZXNvdXJjZSIsCisJ CQkgICAgICAgInJlc291cmNlMCIsICJyZXNvdXJjZTEiLCAicmVzb3VyY2UyIiwKKwkJCSAgICAg ICAicmVzb3VyY2UzIiwgInJlc291cmNlNCIsICJyZXNvdXJjZTUiLAorCQkJICAgICAgICJyZXNv dXJjZTBfd2MiLCAicmVzb3VyY2UxX3djIiwgInJlc291cmNlMl93YyIsCisJCQkgICAgICAgInJl c291cmNlM193YyIsICJyZXNvdXJjZTRfd2MiLCAicmVzb3VyY2U1X3djIiwKKwkJCSAgICAgICAi ZHJpdmVyIiwKKwkJCSAgICAgICAidWV2ZW50IiwgTlVMTH07CisJY29uc3QgY2hhciAqa2V5Owor CWludCBpID0gMDsKKworCWlmIChzeXNhdHRyc19ibGFja2xpc3RfaHQpCisJCXJldHVybjsKKwor CXN5c2F0dHJzX2JsYWNrbGlzdF9odCA9IGdfaGFzaF90YWJsZV9uZXcoZ19zdHJfaGFzaCwgZ19z dHJfZXF1YWwpOworCWlndF9hc3NlcnQoc3lzYXR0cnNfYmxhY2tsaXN0X2h0KTsKKworCXdoaWxl ICgoa2V5ID0ga2V5c1tpKytdKSkKKwkJZ19oYXNoX3RhYmxlX2FkZChzeXNhdHRyc19ibGFja2xp c3RfaHQsIChncG9pbnRlcikga2V5KTsKK30KKworI2RlZmluZSBpc19vbl9ibGFja2xpc3Qoa2V5 KSBcCisJZ19oYXNoX3RhYmxlX2NvbnRhaW5zKHN5c2F0dHJzX2JsYWNrbGlzdF9odCwga2V5KQor CitzdGF0aWMgc3RydWN0IGlndF9kZXZpY2UgKmlndF9kZXZpY2VfbmV3KHZvaWQpCit7CisJc3Ry dWN0IGlndF9kZXZpY2UgKmRldjsKKwlkZXYgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBpZ3Rf ZGV2aWNlKSk7CisJaWYgKCFkZXYpCisJCXJldHVybiBOVUxMOworCisJZGV2LT5hdHRyc19odCA9 IGdfaGFzaF90YWJsZV9uZXdfZnVsbChnX3N0cl9oYXNoLCBnX3N0cl9lcXVhbCwKKwkJCQkJICAg ICAgZnJlZSwgZnJlZSk7CisJZGV2LT5wcm9wc19odCA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbChn X3N0cl9oYXNoLCBnX3N0cl9lcXVhbCwKKwkJCQkJICAgICAgZnJlZSwgZnJlZSk7CisKKwlpZiAo ZGV2LT5hdHRyc19odCAmJiBkZXYtPnByb3BzX2h0KQorCQlyZXR1cm4gZGV2OworCisJcmV0dXJu IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGlndF9kZXZpY2VfYWRkX3Byb3Aoc3RydWN0IGlndF9k ZXZpY2UgKmRldiwKKwkJCQljb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlKQorewor CWlmICgha2V5IHx8ICF2YWx1ZSkKKwkJcmV0dXJuOworCisJZ19oYXNoX3RhYmxlX2luc2VydChk ZXYtPnByb3BzX2h0LCBzdHJkdXAoa2V5KSwgc3RyZHVwKHZhbHVlKSk7Cit9CisKK3N0YXRpYyB2 b2lkIGlndF9kZXZpY2VfYWRkX2F0dHIoc3RydWN0IGlndF9kZXZpY2UgKmRldiwKKwkJCQljb25z dCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWNvbnN0IGNoYXIgKnYgPSB2YWx1 ZTsKKworCWlmICgha2V5KQorCQlyZXR1cm47CisKKwkvKiBJdCdzIHBvc3NpYmxlIHdlIGhhdmUg c3ltbGluayBhdCBrZXkgZmlsZW5hbWUsIGJ1dCB1ZGV2CisJICogbGlicmFyeSByZXNvbHZlcyBv bmx5IGZldyBvZiB0aGVtICovCisJaWYgKCF2KSB7CisJCXN0cnVjdCBzdGF0IHN0OworCQljaGFy IHBhdGhbUEFUSF9NQVhdOworCQljaGFyIGxpbmt0b1tQQVRIX01BWF07CisJCWludCBsZW47CisK KwkJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJXMvJXMiLCBkZXYtPnN5c3BhdGgsIGtl eSk7CisJCWlmIChsc3RhdChwYXRoLCAmc3QpICE9IDApCisJCQlyZXR1cm47CisKKwkJbGVuID0g cmVhZGxpbmsocGF0aCwgbGlua3RvLCBzaXplb2YobGlua3RvKSk7CisJCWlmIChsZW4gPD0gMCB8 fCBsZW4gPT0gKHNzaXplX3QpIHNpemVvZihsaW5rdG8pKQorCQkJcmV0dXJuOworCQlsaW5rdG9b bGVuXSA9ICdcMCc7CisJCXYgPSBzdHJyY2hyKGxpbmt0bywgJy8nKTsKKwkJaWYgKHYgPT0gTlVM TCkKKwkJCXJldHVybjsKKwkJdisrOworCX0KKworCWdfaGFzaF90YWJsZV9pbnNlcnQoZGV2LT5h dHRyc19odCwgc3RyZHVwKGtleSksIHN0cmR1cCh2KSk7Cit9CisKKy8qIEl0ZXJhdGUgb3ZlciB1 ZGV2IHByb3BlcnRpZXMgbGlzdCBhbmQgcmV3cml0ZSBpdCB0byBpZ3RfZGV2aWNlIHByb3BlcnRp ZXMKKyAqIGhhc2ggdGFibGUgZm9yIGluc3RhbnQgYWNjZXNzLgorICovCitzdGF0aWMgdm9pZCBn ZXRfcHJvcHMoc3RydWN0IHVkZXZfZGV2aWNlICpkZXYsIHN0cnVjdCBpZ3RfZGV2aWNlICppZGV2 KQoreworCXN0cnVjdCB1ZGV2X2xpc3RfZW50cnkgKmVudHJ5OworCisJZW50cnkgPSB1ZGV2X2Rl dmljZV9nZXRfcHJvcGVydGllc19saXN0X2VudHJ5KGRldik7CisJd2hpbGUgKGVudHJ5KSB7CisJ CWNvbnN0IGNoYXIgKm5hbWUgPSB1ZGV2X2xpc3RfZW50cnlfZ2V0X25hbWUoZW50cnkpOworCQlj b25zdCBjaGFyICp2YWx1ZSA9IHVkZXZfbGlzdF9lbnRyeV9nZXRfdmFsdWUoZW50cnkpOworCQlp Z3RfZGV2aWNlX2FkZF9wcm9wKGlkZXYsIG5hbWUsIHZhbHVlKTsKKwkJZW50cnkgPSB1ZGV2X2xp c3RfZW50cnlfZ2V0X25leHQoZW50cnkpOworCQlEQkcoInByb3A6ICVzLCB2YWw6ICVzXG4iLCBu YW1lLCB2YWx1ZSk7CisJfQorfQorCisvKiBTYW1lIGFzIGdldF9wcm9wcygpLCBidXQgcmV3cml0 ZXMgc3lzYXR0cnMuIFJlc29sdmVzIHN5bWJvbGljIGxpbmtzCisgKiBub3QgaGFuZGxlZCBieSB1 ZGV2IGdldF9zeXNhdHRyX3ZhbHVlKCkuCisgKiBGdW5jdGlvbiBza2lwcyBzeXNhdHRycyBmcm9t IGJsYWNrbGlzdCBodCAoYWNxdWlyaW5nIHNvbWUgdmFsdWVzIGNhbiB0YWtlCisgKiBzZWNvbmRz KS4KKyAqLworc3RhdGljIHZvaWQgZ2V0X2F0dHJzKHN0cnVjdCB1ZGV2X2RldmljZSAqZGV2LCBz dHJ1Y3QgaWd0X2RldmljZSAqaWRldikKK3sKKwlzdHJ1Y3QgdWRldl9saXN0X2VudHJ5ICplbnRy eTsKKworCWVudHJ5ID0gdWRldl9kZXZpY2VfZ2V0X3N5c2F0dHJfbGlzdF9lbnRyeShkZXYpOwor CXdoaWxlIChlbnRyeSkgeworCQljb25zdCBjaGFyICprZXkgPSB1ZGV2X2xpc3RfZW50cnlfZ2V0 X25hbWUoZW50cnkpOworCQljb25zdCBjaGFyICp2YWx1ZTsKKworCQlpZiAoaXNfb25fYmxhY2ts aXN0KGtleSkpIHsKKwkJCWVudHJ5ID0gdWRldl9saXN0X2VudHJ5X2dldF9uZXh0KGVudHJ5KTsK KwkJCWNvbnRpbnVlOworCQl9CisKKwkJdmFsdWUgPSB1ZGV2X2RldmljZV9nZXRfc3lzYXR0cl92 YWx1ZShkZXYsIGtleSk7CisJCWlndF9kZXZpY2VfYWRkX2F0dHIoaWRldiwga2V5LCB2YWx1ZSk7 CisJCWVudHJ5ID0gdWRldl9saXN0X2VudHJ5X2dldF9uZXh0KGVudHJ5KTsKKwkJREJHKCJhdHRy OiAlcywgdmFsOiAlc1xuIiwga2V5LCB2YWx1ZSk7CisJfQorfQorCisjZGVmaW5lIGdldF9wcm9w KGRldiwgcHJvcCkgKGNoYXIgKikgZ19oYXNoX3RhYmxlX2xvb2t1cChkZXYtPnByb3BzX2h0LCBw cm9wKQorI2RlZmluZSBnZXRfYXR0cihkZXYsIGF0dHIpIChjaGFyICopIGdfaGFzaF90YWJsZV9s b29rdXAoZGV2LT5hdHRyc19odCwgYXR0cikKKyNkZWZpbmUgZ2V0X3Byb3Bfc3Vic3lzdGVtKGRl dikgZ2V0X3Byb3AoZGV2LCAiU1VCU1lTVEVNIikKKyNkZWZpbmUgaXNfZHJtX3N1YnN5c3RlbShk ZXYpICAgKCFzdHJjbXAoZ2V0X3Byb3Bfc3Vic3lzdGVtKGRldiksICJkcm0iKSkKKyNkZWZpbmUg aXNfcGNpX3N1YnN5c3RlbShkZXYpICAgKCFzdHJjbXAoZ2V0X3Byb3Bfc3Vic3lzdGVtKGRldiks ICJwY2kiKSkKKyNkZWZpbmUgaXNfcGxhdGZvcm1fc3Vic3lzdGVtKGRldikgKCFzdHJjbXAoZ2V0 X3Byb3Bfc3Vic3lzdGVtKGRldiksICJwbGF0Zm9ybSIpKQorCisvKiBHZXRzIFBDSV9JRCBwcm9w ZXJ0eSwgc3BsaXRzIHRvIHh4eHg6eXl5eSBhbmQgc3RvcmVzCisgKiB4eHh4IHRvIGRldi0+dmVu ZG9yIGFuZCB5eXl5IHRvIGRldi0+ZGV2aWNlIGZvcgorICogZmFzdGVyIGFjY2Vzcy4KKyAqLwor c3RhdGljIHZvaWQgc2V0X3ZlbmRvcl9kZXZpY2Uoc3RydWN0IGlndF9kZXZpY2UgKmRldikKK3sK Kwljb25zdCBjaGFyICpwY2lfaWQgPSBnZXRfcHJvcChkZXYsICJQQ0lfSUQiKTsKKwlpZiAoIXBj aV9pZCB8fCBzdHJsZW4ocGNpX2lkKSAhPSA5KQorCQlyZXR1cm47CisJZGV2LT52ZW5kb3IgPSBz dHJuZHVwKHBjaV9pZCwgNCk7CisJZGV2LT5kZXZpY2UgPSBzdHJuZHVwKHBjaV9pZCArIDUsIDQp OworfQorCisvKiBBbGxvY2F0ZSBhcnJheXMgZm9yIGtlZXBpbmcgc2Nhbm5lZCBkZXZpY2VzICov CitzdGF0aWMgYm9vbCBwcmVwYXJlX3NjYW4odm9pZCkKK3sKKwlpZiAoIWlndF9kZXZzLmRldnMp CisJCWlndF9kZXZzLmRldnMgPSBnX3B0cl9hcnJheV9zaXplZF9uZXcoNCk7CisJaWYgKCFpZ3Rf ZGV2cy52aWV3KQorCQlpZ3RfZGV2cy52aWV3ID0gZ19wdHJfYXJyYXlfc2l6ZWRfbmV3KDQpOwor CisJaWYgKCFpZ3RfZGV2cy5kZXZzIHx8ICFpZ3RfZGV2cy52aWV3KQorCQlyZXR1cm4gZmFsc2U7 CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyogQ3JlYXRlIG5ldyBpZ3RfZGV2aWNlIGZyb20gdWRl diBkZXZpY2UuCisgICBGaWxscyBzdHJ1Y3R1cmUgd2l0aCBtb3N0IHVzYWJsZSB1ZGV2IGRldmlj ZSB2YXJpYWJsZXMsIHByb3BlcnRpZXMKKyAgIGFuZCBzeXNhdHRycy4KKyovCitzdGF0aWMgc3Ry dWN0IGlndF9kZXZpY2UgKmlndF9kZXZpY2VfbmV3X2Zyb21fdWRldihzdHJ1Y3QgdWRldl9kZXZp Y2UgKmRldikKK3sKKwlzdHJ1Y3QgaWd0X2RldmljZSAqaWRldiA9IGlndF9kZXZpY2VfbmV3KCk7 CisJaWd0X2Fzc2VydChpZGV2KTsKKworCWlkZXYtPnN5c3BhdGggPSBnX3N0cmR1cCh1ZGV2X2Rl dmljZV9nZXRfc3lzcGF0aChkZXYpKTsKKwlpZGV2LT5zdWJzeXN0ZW0gPSBnX3N0cmR1cCh1ZGV2 X2RldmljZV9nZXRfc3Vic3lzdGVtKGRldikpOworCWlkZXYtPmRldm5vZGUgPSBnX3N0cmR1cCh1 ZGV2X2RldmljZV9nZXRfZGV2bm9kZShkZXYpKTsKKworCWlmIChpZGV2LT5kZXZub2RlICYmIHN0 cnN0cihpZGV2LT5kZXZub2RlLCAiL2Rldi9kcmkvY2FyZCIpKQorCQlpZGV2LT5kcm1fY2FyZCA9 IGdfc3RyZHVwKGlkZXYtPmRldm5vZGUpOworCWVsc2UgaWYgKGlkZXYtPmRldm5vZGUgJiYgc3Ry c3RyKGlkZXYtPmRldm5vZGUsICIvZGV2L2RyaS9yZW5kZXIiKSkKKwkJaWRldi0+ZHJtX3JlbmRl ciA9IGdfc3RyZHVwKGlkZXYtPmRldm5vZGUpOworCisJZ2V0X3Byb3BzKGRldiwgaWRldik7CisJ Z2V0X2F0dHJzKGRldiwgaWRldik7CisKKwlyZXR1cm4gaWRldjsKK30KKworLyogSXRlcmF0ZSBv dmVyIGFsbCBpZ3RfZGV2aWNlcyBhcnJheSBhbmQgZmluZCBvbmUgbWF0Y2hlZCB0bworICogc3Vi c3lzdGVtIGFuZCBzeXNwYXRoLgorKi8KK3N0YXRpYyBzdHJ1Y3QgaWd0X2RldmljZSAqaWd0X2Rl dmljZV9maW5kKGNvbnN0IGNoYXIgKnN1YnN5c3RlbSwKKwkJCQkJICBjb25zdCBjaGFyICpzeXNw YXRoKQoreworCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXY7CisKKwlmb3IgKGludCBpID0gMDsgaSA8 IGlndF9kZXZzLmRldnMtPmxlbjsgaSsrKSB7CisJCWRldiA9IGdfcHRyX2FycmF5X2luZGV4KGln dF9kZXZzLmRldnMsIGkpOworCQlpZiAoIXN0cmNtcChkZXYtPnN1YnN5c3RlbSwgc3Vic3lzdGVt KSAmJgorCQkJIXN0cmNtcChkZXYtPnN5c3BhdGgsIHN5c3BhdGgpKQorCQkJcmV0dXJuIGRldjsK Kwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIEZvciBlYWNoIGRybSBpZ3RfZGV2aWNlIGFkZCBv ciB1cGRhdGUgaXRzIHBhcmVudCBpZ3RfZGV2aWNlIHRvIHRoZSBhcnJheS4KKyAgIEFzIGNhcmQv cmVuZGVyIGRybSBkZXZpY2VzIG1vc3RseSBoYXZlIHNhbWUgcGFyZW50ICh2a21zIGlzIGFuIGV4 Y2VwdGlvbikKKyAgIGxpbmsgdG8gaXQgYW5kIHVwZGF0ZSBjb3JyZXNwb25kaW5nIGRybV9jYXJk IC8gZHJtX3JlbmRlciBmaWVsZHMuCisqLworc3RhdGljIHZvaWQgdXBkYXRlX29yX2FkZF9wYXJl bnQoc3RydWN0IHVkZXZfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpZ3RfZGV2aWNlICppZGV2 KQoreworCXN0cnVjdCB1ZGV2X2RldmljZSAqcGFyZW50X2RldjsKKwlzdHJ1Y3QgaWd0X2Rldmlj ZSAqcGFyZW50X2lkZXY7CisJY29uc3QgY2hhciAqc3Vic3lzdGVtLCAqc3lzcGF0aCwgKmRldm5h bWU7CisKKwlwYXJlbnRfZGV2ID0gdWRldl9kZXZpY2VfZ2V0X3BhcmVudChkZXYpOworCWlndF9h c3NlcnQocGFyZW50X2Rldik7CisKKwlzdWJzeXN0ZW0gPSB1ZGV2X2RldmljZV9nZXRfc3Vic3lz dGVtKHBhcmVudF9kZXYpOworCXN5c3BhdGggPSB1ZGV2X2RldmljZV9nZXRfc3lzcGF0aChwYXJl bnRfZGV2KTsKKworCXBhcmVudF9pZGV2ID0gaWd0X2RldmljZV9maW5kKHN1YnN5c3RlbSwgc3lz cGF0aCk7CisJaWYgKCFwYXJlbnRfaWRldikgeworCQlwYXJlbnRfaWRldiA9IGlndF9kZXZpY2Vf bmV3X2Zyb21fdWRldihwYXJlbnRfZGV2KTsKKwkJaWYgKGlzX3BjaV9zdWJzeXN0ZW0ocGFyZW50 X2lkZXYpKSB7CisJCQlzZXRfdmVuZG9yX2RldmljZShwYXJlbnRfaWRldik7CisJCQlwYXJlbnRf aWRldi0+dnMgPSBnZXRfdmVuZG9yX3NwZWMocGFyZW50X2lkZXYtPnZlbmRvcik7CisJCX0KKwkJ Z19wdHJfYXJyYXlfYWRkKGlndF9kZXZzLmRldnMsIHBhcmVudF9pZGV2KTsKKwl9CisJZGV2bmFt ZSA9IHVkZXZfZGV2aWNlX2dldF9kZXZub2RlKGRldik7CisJaWYgKHN0cnN0cihkZXZuYW1lLCAi L2Rldi9kcmkvY2FyZCIpKQorCQlwYXJlbnRfaWRldi0+ZHJtX2NhcmQgPSBnX3N0cmR1cChkZXZu YW1lKTsKKwllbHNlIGlmIChzdHJzdHIoZGV2bmFtZSwgIi9kZXYvZHJpL3JlbmRlciIpKQorCQlw YXJlbnRfaWRldi0+ZHJtX3JlbmRlcj0gZ19zdHJkdXAoZGV2bmFtZSk7CisKKwlpZGV2LT5wYXJl bnQgPSBwYXJlbnRfaWRldjsKK30KKworc3RhdGljIGdpbnQgZGV2c19jb21wYXJlKGdjb25zdHBv aW50ZXIgYSwgZ2NvbnN0cG9pbnRlciBiKQoreworCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXYxLCAq ZGV2MjsKKwlpbnQgcmV0OworCisJZGV2MSA9ICooc3RydWN0IGlndF9kZXZpY2UgKiopIGE7CisJ ZGV2MiA9ICooc3RydWN0IGlndF9kZXZpY2UgKiopIGI7CisJcmV0ID0gc3RyY21wKGRldjEtPnN1 YnN5c3RlbSwgZGV2Mi0+c3Vic3lzdGVtKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJ cmV0dXJuIHN0cmNtcChkZXYxLT5zeXNwYXRoLCBkZXYyLT5zeXNwYXRoKTsKK30KKworLyogQ29y ZSBzY2FubmluZyBmdW5jdGlvbi4KKyAqCisgKiBBbGwgc2Nhbm5lZCBkZXZpY2VzIGFyZSBrZXB0 IGluc2lkZSBpZ3RfZGV2cy5kZXZzIHBvaW50ZXIgYXJyYXkuCisgKiBFYWNoIGFkZGVkIGRldmlj ZSBpcyBpZ3RfZGV2aWNlIHN0cnVjdHVyZSwgd2hpY2ggY29udHJhcnkgdG8gdWRldiBkZXZpY2UK KyAqIGhhcyBwcm9wZXJ0aWVzIC8gc3lzYXR0cnMgc3RvcmVkIGluc2lkZSBoYXNoIHRhYmxlIGlu c3RlYWQgb2YgbGlzdC4KKyAqCisgKiBGdW5jdGlvbiBpdGVyYXRlcyBvdmVyIGRldmljZXMgb24g J2RybScgc3Vic3lzdGVtLiBGb3IgZWFjaCBkcm0gZGV2aWNlCisgKiBpdHMgcGFyZW50IGlzIHRh a2VuIChidXMgZGV2aWNlKSBhbmQgc3RvcmVkIGluc2lkZSBzYW1lIGFycmF5LgorICogRnVuY3Rp b24gc29ydHMgYWxsIGZvdW5kIGRldmljZXMgdG8ga2VlcCBzYW1lIG9yZGVyIG9mIGJ1cyBkZXZp Y2VzCisgKiBmb3IgcHJvdmlkaW5nIHByZWRpY3RhYmxlIHNlYXJjaC4KKyAqLworc3RhdGljIHZv aWQgc2Nhbl9kcm1fZGV2aWNlcyh2b2lkKQoreworCXN0cnVjdCB1ZGV2ICp1ZGV2OworCXN0cnVj dCB1ZGV2X2VudW1lcmF0ZSAqZW51bWVyYXRlOworCXN0cnVjdCB1ZGV2X2xpc3RfZW50cnkgKmRl dmljZXMsICpkZXZfbGlzdF9lbnRyeTsKKwlpbnQgcmV0OworCisJdWRldiA9IHVkZXZfbmV3KCk7 CisJaWd0X2Fzc2VydCh1ZGV2KTsKKworCWVudW1lcmF0ZSA9IHVkZXZfZW51bWVyYXRlX25ldyh1 ZGV2KTsKKwlpZ3RfYXNzZXJ0KGVudW1lcmF0ZSk7CisKKwlEQkcoIlNjYW5uaW5nIGRybSBzdWJz eXN0ZW1cbiIpOworCXJldCA9IHVkZXZfZW51bWVyYXRlX2FkZF9tYXRjaF9zdWJzeXN0ZW0oZW51 bWVyYXRlLCAiZHJtIik7CisJaWd0X2Fzc2VydCghcmV0KTsKKworCXVkZXZfZW51bWVyYXRlX2Fk ZF9tYXRjaF9wcm9wZXJ0eShlbnVtZXJhdGUsICJERVZOQU1FIiwgIi9kZXYvZHJpLyoiKTsKKwlp Z3RfYXNzZXJ0KCFyZXQpOworCisJcmV0ID0gdWRldl9lbnVtZXJhdGVfc2Nhbl9kZXZpY2VzKGVu dW1lcmF0ZSk7CisJaWd0X2Fzc2VydCghcmV0KTsKKworCWRldmljZXMgPSB1ZGV2X2VudW1lcmF0 ZV9nZXRfbGlzdF9lbnRyeShlbnVtZXJhdGUpOworCWlmICghZGV2aWNlcykKKwkJcmV0dXJuOwor CisJdWRldl9saXN0X2VudHJ5X2ZvcmVhY2goZGV2X2xpc3RfZW50cnksIGRldmljZXMpIHsKKwkJ Y29uc3QgY2hhciAqcGF0aDsKKwkJc3RydWN0IHVkZXZfZGV2aWNlICpkZXY7CisJCXN0cnVjdCBp Z3RfZGV2aWNlICppZGV2OworCisJCXBhdGggPSB1ZGV2X2xpc3RfZW50cnlfZ2V0X25hbWUoZGV2 X2xpc3RfZW50cnkpOworCQlkZXYgPSB1ZGV2X2RldmljZV9uZXdfZnJvbV9zeXNwYXRoKHVkZXYs IHBhdGgpOworCQlpZGV2ID0gaWd0X2RldmljZV9uZXdfZnJvbV91ZGV2KGRldik7CisJCXVwZGF0 ZV9vcl9hZGRfcGFyZW50KGRldiwgaWRldik7CisJCWdfcHRyX2FycmF5X2FkZChpZ3RfZGV2cy5k ZXZzLCBpZGV2KTsKKworCQl1ZGV2X2RldmljZV91bnJlZihkZXYpOworCX0KKwl1ZGV2X2VudW1l cmF0ZV91bnJlZihlbnVtZXJhdGUpOworCXVkZXZfdW5yZWYodWRldik7CisKKwlnX3B0cl9hcnJh eV9zb3J0KGlndF9kZXZzLmRldnMsIGRldnNfY29tcGFyZSk7CisJZm9yIChpbnQgaSA9IDA7IGkg PCBpZ3RfZGV2cy5kZXZzLT5sZW47IGkrKykgeworCQlnX3B0cl9hcnJheV9hZGQoaWd0X2RldnMu dmlldywKKwkJCQlnX3B0cl9hcnJheV9pbmRleChpZ3RfZGV2cy5kZXZzLCBpKSk7CisJfQorfQor CitzdHJ1Y3QgbmFtZV92YWx1ZSBmaWx0ZXJfZGVmaW5pdGlvbl9saXN0W107CitzdGF0aWMgdm9p ZCBwb3B1bGF0ZV9ncHVfZGF0YSh2b2lkKQoreworCWZpbGxfaHQoJmdwdV92ZW5kb3JfaHQsICZn cHVfdmVuZG9yX2xpc3RbMF0pOworCWZpbGxfaHQoJmZpbHRlcl9kZWZpbml0aW9uX2h0LCAmZmls dGVyX2RlZmluaXRpb25fbGlzdFswXSk7Cit9CisKK3N0YXRpYyB2b2lkIGlndF9kZXZpY2VfZnJl ZShzdHJ1Y3QgaWd0X2RldmljZSAqZGV2KQoreworCWZyZWUoZGV2LT5kZXZub2RlKTsKKwlmcmVl KGRldi0+c3Vic3lzdGVtKTsKKwlmcmVlKGRldi0+c3lzcGF0aCk7CisJZnJlZShkZXYtPmRybV9j YXJkKTsKKwlmcmVlKGRldi0+ZHJtX3JlbmRlcik7CisJZnJlZShkZXYtPnZlbmRvcik7CisJZnJl ZShkZXYtPmRldmljZSk7CisJZ19oYXNoX3RhYmxlX2Rlc3Ryb3koZGV2LT5hdHRyc19odCk7CisJ Z19oYXNoX3RhYmxlX2Rlc3Ryb3koZGV2LT5wcm9wc19odCk7Cit9CisKKy8qKgorICogaWd0X2Rl dmljZXNfc2NhbgorICogQGZvcmNlOiBlbmZvcmNlIHNjYW5uaW5nIGRldmljZXMKKyAqCisgKiBG dW5jdGlvbiBzY2FucyB1ZGV2IGluIHNlYXJjaCBvZiBncHUgZGV2aWNlcy4gRm9yIGZpcnN0IHJ1 biBpdCBjYW4gYmUKKyAqIGNhbGxlZCB3aXRoIEBmb3JjZSA9IGZhbHNlLiBJZiBzb21ldGhpbmcg Y2hhbmdlcyBkdXJpbmcgdGhlIHRoZSB0ZXN0CisgKiBvciB0ZXN0IGRvZXMgc29tZSBtb2R1bGUg bG9hZGluZyAobmV3IGRybSBkZXZpY2VzIG9jY3VycyBkdXJpbmcgZXhlY3V0aW9uKQorICogZnVu Y3Rpb24gbXVzdCBiZSBjYWxsZWQgYWdhaW4gd2l0aCBAZm9yY2UgPSB0cnVlIHRvIHJlZnJlc2gg ZGV2aWNlIGFycmF5LgorICovCit2b2lkIGlndF9kZXZpY2VzX3NjYW4oYm9vbCBmb3JjZSkKK3sK KwlpZiAoZm9yY2UgJiYgaWd0X2RldnMuZGV2c19zY2FubmVkKSB7CisJCWZvciAoaW50IGkgPSAw OyBpIDwgaWd0X2RldnMuZGV2cy0+bGVuOyBpKyspIHsKKwkJCXN0cnVjdCBpZ3RfZGV2aWNlICpk ZXYgPQorCQkJCQlnX3B0cl9hcnJheV9pbmRleChpZ3RfZGV2cy5kZXZzLCBpKTsKKwkJCWlndF9k ZXZpY2VfZnJlZShkZXYpOworCQkJZnJlZShkZXYpOworCQl9CisJCWlndF9kZXZzLmRldnNfc2Nh bm5lZCA9IGZhbHNlOworCQlnX3B0cl9hcnJheV9mcmVlKGlndF9kZXZzLnZpZXcsIHRydWUpOwor CQlnX3B0cl9hcnJheV9mcmVlKGlndF9kZXZzLmRldnMsIHRydWUpOworCQlpZ3RfZGV2cy52aWV3 ID0gTlVMTDsKKwkJaWd0X2RldnMuZGV2cyA9IE5VTEw7CisJfQorCisJaWYgKGlndF9kZXZzLmRl dnNfc2Nhbm5lZCkKKwkJcmV0dXJuOworCisJcG9wdWxhdGVfYmxhY2tsaXN0X2tleXMoKTsgICAg ICAvL2tleXMgZnJvbSBzeXNhdHRyIHdlIHNraXAKKwlwb3B1bGF0ZV9ncHVfZGF0YSgpOworCisJ cHJlcGFyZV9zY2FuKCk7CisJc2Nhbl9kcm1fZGV2aWNlcygpOworCisJaWd0X2RldnMuZGV2c19z Y2FubmVkID0gdHJ1ZTsKK30KKworI2RlZmluZSBwcl9zaW1wbGUoaywgdikgcHJpbnRmKCIgICAg JS0xNnM6ICVzXG4iLCBrLCB2KQorI2RlZmluZSBwcl9zaW1wbGUyKGssIHYxLCB2MikgcHJpbnRm KCIgICAgJS0xNnM6ICVzOiVzXG4iLCBrLCB2MSwgdjIpCisjZGVmaW5lIHByX3NpbXBsZV9wcm9w KGRldiwga2V5KSBwcl9zaW1wbGUoa2V5LCBnZXRfcHJvcChkZXYsIGtleSkpCisjZGVmaW5lIHBy X3NpbXBsZV9hdHRyKGRldiwga2V5KSBwcl9zaW1wbGUoa2V5LCBnZXRfYXR0cihkZXYsIGtleSkp CisKK3N0YXRpYyB2b2lkIGlndF9kZXZzX3ByaW50X3NpbXBsZShHUHRyQXJyYXkgKnZpZXcpCit7 CisJc3RydWN0IGlndF9kZXZpY2UgKmRldjsKKwlpbnQgaTsKKworCWlmICghdmlldykKKwkJcmV0 dXJuOworCisJZm9yIChpID0gMDsgaSA8IHZpZXctPmxlbjsgaSsrKSB7CisJCWRldiA9IGdfcHRy X2FycmF5X2luZGV4KHZpZXcsIGkpOworCQlwcmludGYoIiVzOiVzXG4iLCBkZXYtPnN1YnN5c3Rl bSwgZGV2LT5zeXNwYXRoKTsKKwkJaWYgKGRldi0+ZHJtX2NhcmQpCisJCQlwcl9zaW1wbGUoImRy bSBjYXJkIiwgZGV2LT5kcm1fY2FyZCk7CisJCWlmIChkZXYtPmRybV9yZW5kZXIpCisJCQlwcl9z aW1wbGUoImRybSByZW5kZXIiLCBkZXYtPmRybV9yZW5kZXIpOworCQlpZiAoaXNfZHJtX3N1YnN5 c3RlbShkZXYpKSB7CisJCQlwcl9zaW1wbGUyKCJwYXJlbnQiLCBkZXYtPnBhcmVudC0+c3Vic3lz dGVtLAorCQkJCSAgIGRldi0+cGFyZW50LT5zeXNwYXRoKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChp c19wY2lfc3Vic3lzdGVtKGRldikpIHsKKwkJCQlwcl9zaW1wbGUoInZlbmRvciIsIGRldi0+dmVu ZG9yKTsKKwkJCQlwcl9zaW1wbGUoImRldmljZSIsIGRldi0+ZGV2aWNlKTsKKwkJCX0KKwkJfQor CQlwcmludGYoIlxuIik7CisJfQorfQorCisjZGVmaW5lIHByX2RldGFpbChrLCB2KSBwcmludGYo IiUtMzJzOiAlc1xuIiwgaywgdikKKworc3RhdGljIHZvaWQgcHJpbnRfaHQoR0hhc2hUYWJsZSAq aHQpCit7CisJR0xpc3QgKmtleXMgPSBnX2hhc2hfdGFibGVfZ2V0X2tleXMoaHQpOworCWtleXMg PSBnX2xpc3Rfc29ydChrZXlzLCAoR0NvbXBhcmVGdW5jKSBzdHJjbXApOworCXdoaWxlIChrZXlz KSB7CisJCWNoYXIgKmsgPSAoY2hhciAqKSBrZXlzLT5kYXRhOworCQljaGFyICp2ID0gZ19oYXNo X3RhYmxlX2xvb2t1cChodCwgayk7CisJCXByX2RldGFpbChrLCB2KTsKKwkJa2V5cyA9IGdfbGlz dF9uZXh0KGtleXMpOworCX0KKwlnX2xpc3RfZnJlZShrZXlzKTsKK30KKworc3RhdGljIHZvaWQg aWd0X2RldnNfcHJpbnRfZGV0YWlsKEdQdHJBcnJheSAqdmlldykKK3sKKwlzdHJ1Y3QgaWd0X2Rl dmljZSAqZGV2OworCWludCBpOworCisJaWYgKCF2aWV3KQorCQlyZXR1cm47CisKKwlmb3IgKGkg PSAwOyBpIDwgdmlldy0+bGVuOyBpKyspIHsKKwkJZGV2ID0gZ19wdHJfYXJyYXlfaW5kZXgodmll dywgaSk7CisJCXByaW50ZigiPT09PT09PT09PSAlczolcyA9PT09PT09PT09XG4iLAorCQkgICAg ICAgZGV2LT5zdWJzeXN0ZW0sIGRldi0+c3lzcGF0aCk7CisJCWlmICghaXNfZHJtX3N1YnN5c3Rl bShkZXYpKSB7CisJCQlwcl9kZXRhaWwoImNhcmQgZGV2aWNlIiwgZGV2LT5kcm1fY2FyZCk7CisJ CQlwcl9kZXRhaWwoInJlbmRlciBkZXZpY2UiLCBkZXYtPmRybV9yZW5kZXIpOworCQl9CisKKwkJ cHJpbnRmKCJcbltwcm9wZXJ0aWVzXVxuIik7CisJCXByaW50X2h0KGRldi0+cHJvcHNfaHQpOwor CQlwcmludGYoIlxuW2F0dHJpYnV0ZXNdXG4iKTsKKwkJcHJpbnRfaHQoZGV2LT5hdHRyc19odCk7 CisJCXByaW50ZigiXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHJpbnRfZnVuYyB7CisJ dm9pZCAoKnBybikoR1B0ckFycmF5ICopOworfSBwcmludF9mdW5jdGlvbnNbXSA9IHsKKwlbSUdU X1BSSU5UX1NJTVBMRV0gPSB7IC5wcm4gPSBpZ3RfZGV2c19wcmludF9zaW1wbGUgfSwKKwlbSUdU X1BSSU5UX0RFVEFJTF0gPSB7IC5wcm4gPSBpZ3RfZGV2c19wcmludF9kZXRhaWwgfSwKK307CisK Ky8qKgorICogaWd0X2RldmljZXNfcHJpbnQKKyAqIEBwcmludHR5cGU6IElHVF9QUklOVF9TSU1Q TEUgb3IgSUdUX1BSSU5UX0RFVEFJTAorICoKKyAqIEZ1bmN0aW9uIGlzIHVzZWQgYnkgJ2xzZ3B1 JyB0b29sIHRvIHByaW50IGRldmljZSBhcnJheSBpbiBzaW1wbGUgb3IgZGV0YWlsZWQKKyAqIGZv cm0uIFRoaXMgZnVuY3Rpb24gaXMgYWRkZWQgaGVyZSBpbnN0ZWFkIGluICdsc2dwdScgdG8gYXZv aWQgZXhwb3NpbmcKKyAqIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRhdGEgc3RydWN0dXJlcy4K KyAqLwordm9pZCBpZ3RfZGV2aWNlc19wcmludChlbnVtIGlndF9kZXZpY2VzX3ByaW50X3R5cGUg cHJpbnR0eXBlKQoreworCXByaW50X2Z1bmN0aW9uc1twcmludHR5cGVdLnBybihpZ3RfZGV2cy52 aWV3KTsKK30KKworLyoqCisgKiBpZ3RfZGV2aWNlc19wcmludF92ZW5kb3JzCisgKgorICogUHJp bnQgcGNpIGlkIC0+IHZlbmRvciBtYXBwaW5ncy4gVmVuZG9yIG5hbWVzIHByaW50ZWQgYnkgdGhp cyBmdW5jdGlvbgorICogY2FuIGJlIHVzZWQgZm9yIGZpbHRlcnMgbGlrZSBwY2kgd2hpY2ggYWxs b3dzIHBhc3NpbmcgdmVuZG9yIC0gbGlrZQorICogdmVuZG9yIGlkICg4MDg2KSBvciBhcyBhIHN0 cmluZyAoSW50ZWwpLgorICovCit2b2lkIGlndF9kZXZpY2VzX3ByaW50X3ZlbmRvcnModm9pZCkK K3sKKwlzdHJ1Y3QgbmFtZV92YWx1ZSAqbGlzdCA9ICZncHVfdmVuZG9yX2xpc3RbMF07CisJcHJp bnRmKCJSZWNvZ25pemVkIHZlbmRvcnM6XG4iKTsKKworCXByaW50ZigiJS04cyAlLTE2c1xuIiwg IlBDSSBJRCIsICJ2ZW5kb3IiKTsKKwl3aGlsZSAobGlzdC0+bmFtZSkgeworCQlzdHJ1Y3QgdmVu ZG9yX3NwZWMgKnZzID0gKHN0cnVjdCB2ZW5kb3Jfc3BlYyAqKSBsaXN0LT52YWx1ZTsKKwkJaWYg KHZzKQorCQkJcHJpbnRmKCIlLThzICUtMTZzXG4iLCBsaXN0LT5uYW1lLCB2cy0+dmVuZG9yKTsK KwkJbGlzdCsrOworCX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGSUxU RVJfU1BFQ19OQU1FX0xFTiAzMgorI2RlZmluZSBGSUxURVJfU1BFQ19EQVRBX0xFTiAyNTYKK3N0 cnVjdCBmaWx0ZXJfc3BlYyB7CisJY2hhciBuYW1lW0ZJTFRFUl9TUEVDX05BTUVfTEVOXTsKKwlj aGFyIGRhdGFbRklMVEVSX1NQRUNfREFUQV9MRU5dOworfTsKKworc3RydWN0IGZpbHRlcl9mdW5j IHsKKwlHUHRyQXJyYXkgKigqZmlsdGVyX2Z1bmN0aW9uKShzdHJ1Y3QgZmlsdGVyX3NwZWMgKmZz cGVjLAorCQkJCSAgICAgIHN0cnVjdCBmaWx0ZXJfZnVuYyAqZmZ1bmMpOworCWNvbnN0IGNoYXIg KmhlbHA7CisJY29uc3QgY2hhciAqZGV0YWlsOworCisJY29uc3QgY2hhciAqcHJvcGVydHk7CisJ Y29uc3QgY2hhciAqdmFsdWU7Cit9OworCitzdHJ1Y3QgZmlsdGVyX2RhdGEgeworCWNoYXIgKnZl bmRvcjsKKwljaGFyICpkZXZpY2U7CisJY2hhciAqY2FyZDsKKwljaGFyICpkcm07Cit9OworCitz dGF0aWMgR0hhc2hUYWJsZSAqc3BsaXRfZmlsdGVyX2RhdGEoY29uc3QgY2hhciAqZGF0YSkKK3sK KwlHSGFzaFRhYmxlICpodCA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbChnX3N0cl9oYXNoLCBnX3N0 cl9lcXVhbCwKKwkJCQkJICAgICAgIGZyZWUsIGZyZWUpOworCWdjaGFyICoqczsKKwlnY2hhciAq KnN0cnYgPSBnX3N0cnNwbGl0KGRhdGEsICIsIiwgLTEpOworCisJcyA9IHN0cnY7CisJd2hpbGUg KCpzKSB7CisJCWNoYXIgKmssICp2OworCQl2ID0gc3RyY2hyKCpzLCAnPScpOworCQlpZiAoIXYp IHsKKwkJCXMrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWsgPSBzdHJuZHVwKCpzLCB2IC0gKCpz KSk7CisJCXYgPSBzdHJkdXAodiArIDEpOworCQlnX2hhc2hfdGFibGVfaW5zZXJ0KGh0LCBrLCB2 KTsKKwkJcysrOworCX0KKwlnX3N0cmZyZWV2KHN0cnYpOworCisJcmV0dXJuIGh0OworfQorCitz dGF0aWMgYm9vbCBnZXRfZmlsdGVyX3NwZWMoY29uc3QgY2hhciAqZmlsdGVyLCBzdHJ1Y3QgZmls dGVyX3NwZWMgKnNwZWMpCit7CisJaWYgKCFmaWx0ZXIpCisJCXJldHVybiBmYWxzZTsKKworCWlm IChzc2NhbmYoZmlsdGVyLCAiJTMxW146XTolMjU1cyIsIHNwZWMtPm5hbWUsIHNwZWMtPmRhdGEp ID49IDEpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9v bCBpc192ZW5kb3JfbWF0Y2hlZChzdHJ1Y3QgaWd0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyICp2 ZW5kb3IpCit7CisJY29uc3QgY2hhciAqdmVuZG9yX2lkOworCisJaWYgKCFkZXYtPnZlbmRvciB8 fCAhdmVuZG9yKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBGaXJzdCB3ZSBjb21wYXJlIHZlbmRv ciBpZCwgbGlrZSA4MDg2ICovCisJaWYgKCFzdHJjYXNlY21wKGRldi0+dmVuZG9yLCB2ZW5kb3Ip KQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIExpa2VseSB3ZSBoYXZlIHZlbmRvciBzdHJpbmcgaW5z dGVhZCBvZiBpZCAqLworCXZlbmRvcl9pZCA9IGdldF9wY2lfdmVuZG9yX2lkX2J5X25hbWUodmVu ZG9yKTsKKwlpZiAoIXZlbmRvcl9pZCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuICFzdHJj YXNlY21wKGRldi0+dmVuZG9yLCB2ZW5kb3JfaWQpOworfQorCisvKiBGaWx0ZXIgd2hpY2ggbWF0 Y2hlcyBzdWJzeXN0ZW06L3N5cy8uLi4gcGF0aC4KKyAqIFVzZWQgYXMgZmlyc3QgZmlsdGVyIGlu IGNoYWluLgorICovCitzdGF0aWMgR1B0ckFycmF5ICpmaWx0ZXJfc3lzKHN0cnVjdCBmaWx0ZXJf c3BlYyAqZnNwZWMsCisJCQkgICAgIHN0cnVjdCBmaWx0ZXJfZnVuYyAqZmZ1bmMpCit7CisJKHZv aWQpIGZmdW5jOworCisJREJHKCJmaWx0ZXIgc3lzXG4iKTsKKwlpZiAoIXN0cmxlbihmc3BlYy0+ ZGF0YSkpCisJCXJldHVybiBpZ3RfZGV2cy52aWV3OworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBp Z3RfZGV2cy5kZXZzLT5sZW47IGkrKykgeworCQlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2ID0gZ19w dHJfYXJyYXlfaW5kZXgoaWd0X2RldnMuZGV2cywgaSk7CisKKwkJaWYgKHN0cmVxdWFsKGRldi0+ c3Vic3lzdGVtLCBmc3BlYy0+bmFtZSkgJiYKKwkJCXN0cmVxdWFsKGRldi0+c3lzcGF0aCwgZnNw ZWMtPmRhdGEpKSB7CisJCQlnX3B0cl9hcnJheV9hZGQoaWd0X2RldnMudmlldywgZGV2KTsKKwkJ CWJyZWFrOworCQl9CisJfQorCisJREJHKCJGaWx0ZXIgc3lzIHZpZXcgc2l6ZTogJWRcbiIsIGln dF9kZXZzLnZpZXctPmxlbik7CisKKwlyZXR1cm4gaWd0X2RldnMudmlldzsKK30KKworLyogRmlu ZCBkcm0gZGV2aWNlIHVzaW5nIGRpcmVjdCBwYXRoIHRvIC9kZXYvZHJpLy4KKyAqIEl0IGV4dGVu ZHMgZmlsdGVyX3N5cyB0byBhbGxvdyB1c2luZyBkcm06L2Rldi9kcmkvY2FyZFggYW5kCisgKiBk cm06L2Rldi9kcmkvcmVuZGVyRFggZmlsdGVyIHN5bnRheC4KKyAqLworc3RhdGljIEdQdHJBcnJh eSAqZmlsdGVyX2RybShzdHJ1Y3QgZmlsdGVyX3NwZWMgKmZzcGVjLAorCQkJICAgICBzdHJ1Y3Qg ZmlsdGVyX2Z1bmMgKmZmdW5jKQoreworCSh2b2lkKSBmZnVuYzsKKworCURCRygiZmlsdGVyIGRy bVxuIik7CisJaWYgKCFzdHJsZW4oZnNwZWMtPmRhdGEpKQorCQlyZXR1cm4gaWd0X2RldnMudmll dzsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgaWd0X2RldnMuZGV2cy0+bGVuOyBpKyspIHsKKwkJ c3RydWN0IGlndF9kZXZpY2UgKmRldiA9IGdfcHRyX2FycmF5X2luZGV4KGlndF9kZXZzLmRldnMs IGkpOworCQlpZiAoIWlzX2RybV9zdWJzeXN0ZW0oZGV2KSkKKwkJCWNvbnRpbnVlOworCisJCWlm IChzdHJlcXVhbChkZXYtPnN5c3BhdGgsIGZzcGVjLT5kYXRhKSB8fAorCQkJc3RyZXF1YWwoZGV2 LT5kcm1fY2FyZCwgZnNwZWMtPmRhdGEpIHx8CisJCQlzdHJlcXVhbChkZXYtPmRybV9yZW5kZXIs IGZzcGVjLT5kYXRhKSkgeworCQkJZ19wdHJfYXJyYXlfYWRkKGlndF9kZXZzLnZpZXcsIGRldik7 CisJCQlicmVhazsKKwkJfQorCX0KKworCURCRygiRmlsdGVyIGRybSB2aWV3IHNpemU6ICVkXG4i LCBpZ3RfZGV2cy52aWV3LT5sZW4pOworCisJcmV0dXJuIGlndF9kZXZzLnZpZXc7Cit9CisKKy8q IEZpbmQgYXBwcm9wcmlhdGUgcGNpIGRldmljZSBtYXRjaGluZyB2ZW5kb3IvZGV2aWNlL2NhcmQg ZmlsdGVyIGFyZ3VtZW50cworKi8KK3N0YXRpYyBHUHRyQXJyYXkgKmZpbHRlcl9wY2koc3RydWN0 IGZpbHRlcl9zcGVjICpmc3BlYywKKwkJCSAgICAgc3RydWN0IGZpbHRlcl9mdW5jICpmZnVuYykK K3sKKwlHSGFzaFRhYmxlICpodDsKKwlzdHJ1Y3QgZmlsdGVyX2RhdGEgZmRhdGE7CisJaW50IGNh cmQgPSAtMTsKKwkodm9pZCkgZmZ1bmM7CisKKwlEQkcoImZpbHRlciBwY2lcbiIpOworCisJaHQg PSBzcGxpdF9maWx0ZXJfZGF0YShmc3BlYy0+ZGF0YSk7CisJZmRhdGEudmVuZG9yID0gZ19oYXNo X3RhYmxlX2xvb2t1cChodCwgInZlbmRvciIpOworCWZkYXRhLmRldmljZSA9IGdfaGFzaF90YWJs ZV9sb29rdXAoaHQsICJkZXZpY2UiKTsKKwlmZGF0YS5jYXJkID0gZ19oYXNoX3RhYmxlX2xvb2t1 cChodCwgImNhcmQiKTsKKworCWlmIChmZGF0YS5jYXJkKSB7CisJCXNzY2FuZihmZGF0YS5jYXJk LCAiJWQiLCAmY2FyZCk7CisJCWlmIChjYXJkIDwgMCkgeworCQkJZ19oYXNoX3RhYmxlX2Rlc3Ry b3koaHQpOworCQkJcmV0dXJuIGlndF9kZXZzLnZpZXc7CisJCX0KKwl9IGVsc2UgeworCQljYXJk ID0gMDsKKwl9CisKKwlmb3IgKGludCBpID0gMDsgaSA8IGlndF9kZXZzLmRldnMtPmxlbjsgaSsr KSB7CisJCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXYgPSBnX3B0cl9hcnJheV9pbmRleChpZ3RfZGV2 cy5kZXZzLCBpKTsKKworCQlpZiAoIWlzX3BjaV9zdWJzeXN0ZW0oZGV2KSkKKwkJCWNvbnRpbnVl OworCisJCS8qIFNraXAgaWYgJ3ZlbmRvcicgZG9lc24ndCBtYXRjaCAoaGV4IG9yIG5hbWUpICov CisJCWlmIChmZGF0YS52ZW5kb3IgJiYgIWlzX3ZlbmRvcl9tYXRjaGVkKGRldiwgZmRhdGEudmVu ZG9yKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFNraXAgaWYgJ2RldmljZScgZG9lc24ndCBtYXRj aCAqLworCQlpZiAoZmRhdGEuZGV2aWNlICYmIHN0cmNhc2VjbXAoZmRhdGEuZGV2aWNlLCBkZXYt PmRldmljZSkpCisJCQljb250aW51ZTsKKworCQkvKiBXZSBnZXQgbi10aCBjYXJkICovCisJCWlm ICghY2FyZCkgeworCQkJZ19wdHJfYXJyYXlfYWRkKGlndF9kZXZzLnZpZXcsIGRldik7CisJCQli cmVhazsKKwkJfQorCQljYXJkLS07CisJfQorCisJREJHKCJGaWx0ZXIgcGNpIHZpZXcgc2l6ZTog JWRcbiIsIGlndF9kZXZzLnZpZXctPmxlbik7CisKKwlnX2hhc2hfdGFibGVfZGVzdHJveShodCk7 CisKKwlyZXR1cm4gaWd0X2RldnMudmlldzsKK30KKworLyogSGVscGVyIGZvciBmaW5kaW5nIGZp cnN0IGRldmljZSBtYXRjaGluZyBwcm9wZXJ0eTp2YWx1ZS4KKyovCitzdGF0aWMgR1B0ckFycmF5 ICpmaWx0ZXJfcHJvcGVydHkoc3RydWN0IGZpbHRlcl9zcGVjICpmc3BlYywKKwkJCQkgIHN0cnVj dCBmaWx0ZXJfZnVuYyAqZmZ1bmMpCit7CisJR0hhc2hUYWJsZSAqaHQ7CisJc3RydWN0IGZpbHRl cl9kYXRhIGZkYXRhOworCWludCBjYXJkID0gLTE7CisJY29uc3QgY2hhciAqcHJvcGVydHkgPSBm ZnVuYy0+cHJvcGVydHk7CisJY29uc3QgY2hhciAqdmFsdWUgPSBmZnVuYy0+dmFsdWU7CisKKwlp ZiAoIXByb3BlcnR5IHx8ICF2YWx1ZSkKKwkJcmV0dXJuIGlndF9kZXZzLnZpZXc7CisKKwlEQkco ImZpbHRlciBwcm9wZXJ0eS92YWx1ZSBbJXMvJXNdXG4iLCBwcm9wZXJ0eSwgdmFsdWUpOworCisJ aHQgPSBzcGxpdF9maWx0ZXJfZGF0YShmc3BlYy0+ZGF0YSk7CisJZmRhdGEuY2FyZCA9IGdfaGFz aF90YWJsZV9sb29rdXAoaHQsICJjYXJkIik7CisKKwlpZiAoZmRhdGEuY2FyZCkgeworCQlzc2Nh bmYoZmRhdGEuY2FyZCwgIiVkIiwgJmNhcmQpOworCQlpZiAoY2FyZCA8IDApIHsKKwkJCWdfaGFz aF90YWJsZV9kZXN0cm95KGh0KTsKKwkJCXJldHVybiBpZ3RfZGV2cy52aWV3OworCQl9CisJfSBl bHNlIHsKKwkJY2FyZCA9IDA7CisJfQorCisJZm9yIChpbnQgaSA9IDA7IGkgPCBpZ3RfZGV2cy5k ZXZzLT5sZW47IGkrKykgeworCQljb25zdCBjaGFyICpwcm9wX3ZhbHVlOworCQlzdHJ1Y3QgaWd0 X2RldmljZSAqZGV2ID0gZ19wdHJfYXJyYXlfaW5kZXgoaWd0X2RldnMuZGV2cywgaSk7CisKKwkJ cHJvcF92YWx1ZSA9IGdldF9wcm9wKGRldiwgcHJvcGVydHkpOworCQlpZiAocHJvcF92YWx1ZSAm JiAhc3RyY21wKHByb3BfdmFsdWUsIHZhbHVlKSkgeworCQkJaWYgKCFjYXJkKSB7CisJCQkJZ19w dHJfYXJyYXlfYWRkKGlndF9kZXZzLnZpZXcsIGRldik7CisJCQkJYnJlYWs7CisJCQl9CisJCQlj YXJkLS07CisJCX0KKwl9CisKKwlEQkcoIkZpbHRlciB2aWV3IHNpemU6ICVkXG4iLCBpZ3RfZGV2 cy52aWV3LT5sZW4pOworCisJZ19oYXNoX3RhYmxlX2Rlc3Ryb3koaHQpOworCisJcmV0dXJuIGln dF9kZXZzLnZpZXc7Cit9CisKK3N0YXRpYyBHUHRyQXJyYXkgKmZpbHRlcl92Z2VtKHN0cnVjdCBm aWx0ZXJfc3BlYyAqZnNwZWMsCisJCQkgICAgICBzdHJ1Y3QgZmlsdGVyX2Z1bmMgKmZmdW5jKQor eworCUdQdHJBcnJheSAqdmlldyA9IGZpbHRlcl9wcm9wZXJ0eShmc3BlYywgZmZ1bmMpOworCWlm ICh2aWV3KSB7CisJCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXYgPSBnX3B0cl9hcnJheV9pbmRleCh2 aWV3LCAwKTsKKwkJZGV2LT52cyA9ICZ2X3ZnZW07CisJfQorCXJldHVybiB2aWV3OworfQorCitz dGF0aWMgR1B0ckFycmF5ICpmaWx0ZXJfdmttcyhzdHJ1Y3QgZmlsdGVyX3NwZWMgKmZzcGVjLAor CQkJICAgICAgc3RydWN0IGZpbHRlcl9mdW5jICpmZnVuYykKK3sKKwlyZXR1cm4gZmlsdGVyX3By b3BlcnR5KGZzcGVjLCBmZnVuYyk7Cit9CisKK3N0YXRpYyBHUHRyQXJyYXkgKmZpbHRlcl92YzQo c3RydWN0IGZpbHRlcl9zcGVjICpmc3BlYywKKwkJCSAgICAgc3RydWN0IGZpbHRlcl9mdW5jICpm ZnVuYykKK3sKKwlHUHRyQXJyYXkgKnZpZXcgPSBmaWx0ZXJfcHJvcGVydHkoZnNwZWMsIGZmdW5j KTsKKwlpZiAodmlldykgeworCQlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2ID0gZ19wdHJfYXJyYXlf aW5kZXgodmlldywgMCk7CisJCWRldi0+dnMgPSAmdl92YzQ7CisJfQorCXJldHVybiBmaWx0ZXJf cHJvcGVydHkoZnNwZWMsIGZmdW5jKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWx0ZXJfZnVuYyBm X2RybSA9IHsgLmZpbHRlcl9mdW5jdGlvbiA9IGZpbHRlcl9kcm0sCisJCQkJICAgIC5oZWxwID0g ImRybTovZGV2L2RyaS8qIHBhdGgiLAorCQkJCSAgICAuZGV0YWlsID0gImZpbmQgZHJtIGRldmlj ZSBieSAvZGV2L2RyaS8qIG5vZGVcbiIsCisJCQkJICB9OworCitzdGF0aWMgc3RydWN0IGZpbHRl cl9mdW5jIGZfcGNpID0geyAuZmlsdGVyX2Z1bmN0aW9uID0gZmlsdGVyX3BjaSwKKwkJCQkgICAg LmhlbHAgPSAicGNpOlt2ZW5kb3I9JTA0eC9uYW1lXVssZGV2aWNlPSUwNHhdWyxjYXJkPSVkXSIs CisJCQkJICAgIC5kZXRhaWwgPSAidmVuZG9yIGlzIGhleCBudW1iZXIgb3IgdmVuZG9yIG5hbWVc biIsCisJCQkJICB9OworCitzdGF0aWMgc3RydWN0IGZpbHRlcl9mdW5jIGZfdmdlbSA9IHsgLmZp bHRlcl9mdW5jdGlvbiA9IGZpbHRlcl92Z2VtLAorCQkJCSAgICAgLmhlbHAgPSAidmdlbTpbY2Fy ZD0lZF0iLAorCQkJCSAgICAgLmRldGFpbCA9ICJjYXJkIGlzIG4tdGggdmdlbSBjYXJkIG51bWJl clxuIiwKKwkJCQkgICAgIC5wcm9wZXJ0eSA9ICJNT0RBTElBUyIsCisJCQkJICAgICAudmFsdWUg PSAicGxhdGZvcm06dmdlbSIsCisJCQkJICAgfTsKKworc3RhdGljIHN0cnVjdCBmaWx0ZXJfZnVu YyBmX3ZrbXMgPSB7IC5maWx0ZXJfZnVuY3Rpb24gPSBmaWx0ZXJfdmttcywKKwkJCQkgICAgIC5o ZWxwID0gInZrbXM6W2NhcmQ9JWRdIiwKKwkJCQkgICAgIC5kZXRhaWwgPSAiY2FyZCBpcyBuLXRo IHZrbXMgY2FyZCBudW1iZXJcbiIsCisJCQkJICAgICAucHJvcGVydHkgPSAiTU9EQUxJQVMiLAor CQkJCSAgICAgLnZhbHVlID0gInBsYXRmb3JtOnZrbXMiLAorCQkJCSAgIH07CisKK3N0YXRpYyBz dHJ1Y3QgZmlsdGVyX2Z1bmMgZl92YzQgPSB7IC5maWx0ZXJfZnVuY3Rpb24gPSBmaWx0ZXJfdmM0 LAorCQkJCSAgICAuaGVscCA9ICJ2YzQ6W2NhcmQ9JWRdIiwKKwkJCQkgICAgLmRldGFpbCA9ICJj YXJkIGlzIG4tdGggdmM0IGNhcmQgbnVtYmVyXG4iLAorCQkJCSAgICAucHJvcGVydHkgPSAiT0Zf Q09NUEFUSUJMRV8wIiwKKwkJCQkgICAgLnZhbHVlID0gImJyY20sYmNtMjgzNS12YzQiLAorCQkJ CSAgfTsKKworc3RydWN0IG5hbWVfdmFsdWUgZmlsdGVyX2RlZmluaXRpb25fbGlzdFtdID0gewor CXsgImRybSIsICAgICAoZ3BvaW50ZXIpICZmX2RybSB9LAorCXsgInBjaSIsICAgICAoZ3BvaW50 ZXIpICZmX3BjaSB9LAorCXsgInZnZW0iLCAgICAoZ3BvaW50ZXIpICZmX3ZnZW0gfSwKKwl7ICJ2 a21zIiwgICAgKGdwb2ludGVyKSAmZl92a21zIH0sCisJeyAidmM0IiwgICAgIChncG9pbnRlcikg JmZfdmM0IH0sCisJeyBOVUxMLCB9LAorfTsKKworLyoqCisgKiBAaWd0X2RldmljZV9wcmludF9m aWx0ZXJfdHlwZXMKKyAqCisgKiBQcmludCBhbGwgZmlsdGVycyBzeW50YXggZm9yIGRldmljZSBz ZWxlY3Rpb24uCisgKi8KK3ZvaWQgaWd0X2RldmljZV9wcmludF9maWx0ZXJfdHlwZXModm9pZCkK K3sKKwlzdHJ1Y3QgbmFtZV92YWx1ZSAqbGlzdCA9ICZmaWx0ZXJfZGVmaW5pdGlvbl9saXN0WzBd OworCXByaW50ZigiRmlsdGVyIHR5cGVzOlxuLS0tXG4iKTsKKwlwcmludGYoIiUtMTJzICAlc1xu LS0tXG4iLCAiZmlsdGVyIiwgInN5bnRheCIpOworCisJcHJpbnRmKCIlLTEycyAgJXNcbiIsICIi LCAiZGlyZWN0IHN1YnN5c3RlbTovc3lzLy4uLiBwYXRoIHNlbGVjdGlvblxuIik7CisJcHJpbnRm KCIlLTEycyAgJXNcbiIsICIiLAorCSAgICAgICAiZXg6IGRybTovc3lzL2RldmljZXMvcGNpMDAw MDowMC8wMDAwOjAwOjAyLjAvZHJtL2NhcmQwIik7CisJcHJpbnRmKCIlLTEycyAgJXNcbiIsICIi LAorCSAgICAgICAiICAgIHBjaTovc3lzL2RldmljZXMvcGNpMDAwMDowMC8wMDAwOjAwOjAyLjAi KTsKKwlwcmludGYoIiUtMTJzICAlc1xuIiwgIiIsCisJICAgICAgICIgICAgcGxhdGZvcm06L3N5 cy9kZXZpY2VzL3BsYXRmb3JtL3ZnZW1cbiIpOworCisJd2hpbGUgKGxpc3QtPm5hbWUpIHsKKwkJ c3RydWN0IGZpbHRlcl9mdW5jICp2ID0gKHN0cnVjdCBmaWx0ZXJfZnVuYyAqKSBsaXN0LT52YWx1 ZTsKKwkJcHJpbnRmKCIlLTEycyAgJXNcbiIsIGxpc3QtPm5hbWUsIHYtPmhlbHApOworCQlwcmlu dGYoIiUtMTJzICAlc1xuIiwgIiIsIHYtPmRldGFpbCk7CisJCWxpc3QrKzsKKwl9Cit9CisKK3N0 YXRpYyBHUHRyQXJyYXkgKmRldmljZV9maWx0ZXJzID0gTlVMTDsKKworI2RlZmluZSBERVZJQ0Vf RklMVEVSX0NIRUNLX0FMTE9DKCkgXAorCWRvIHsgXAorCQlpZiAoIWRldmljZV9maWx0ZXJzKSBc CisJCQlkZXZpY2VfZmlsdGVycyA9IGdfcHRyX2FycmF5X25ld19mdWxsKDIsIGZyZWUpOyBcCisJ CWlndF9hc3NlcnQoZGV2aWNlX2ZpbHRlcnMpOyBcCisJfSB3aGlsZSgwKQorCisvKioKKyAqIGln dF9kZXZpY2VfZmlsdGVyX2NvdW50CisgKgorICogUmV0dXJucyBudW1iZXIgb2YgZmlsdGVycyBj b2xsZWN0ZWQgaW4gdGhlIGZpbHRlciBhcnJheS4KKyAqLworaW50IGlndF9kZXZpY2VfZmlsdGVy X2NvdW50KHZvaWQpCit7CisJREVWSUNFX0ZJTFRFUl9DSEVDS19BTExPQygpOworCisJcmV0dXJu IGRldmljZV9maWx0ZXJzLT5sZW47Cit9CisKKy8qKgorICogaWd0X2RldmljZV9maWx0ZXJfYWRk CisgKiBAZmlsdGVyOiBmaWx0ZXIgdG8gYmUgc3RvcmVkIGluIGZpbHRlciBhcnJheQorICoKKyAq IEZ1bmN0aW9uIGFsbG93cyBwYXNzaW5nIHNpbmdsZSBvciBtb3JlIGZpbHRlcnMgd2l0aGluIG9u ZSBzdHJpbmcuIFRoaXMgaXMKKyAqIGZvciBDSSB3aGVuIGl0IGNhbiBleHRyYWN0IGZpbHRlciBm cm9tIGVudmlyb25tZW50IHZhcmlhYmxlIChhbmQgaXQgbXVzdAorICogYmUgc2luZ2xlIHN0cmlu ZykuIFNvIGlmIEBmaWx0ZXIgY29udGFpbnMgc2VtaWNvbG9uICc7JyBpdCB0cmVhdHMKKyAqIGVh Y2ggcGFydCBhcyBzZXBhcmF0ZSBmaWx0ZXIgYW5kIGFkZHMgdG8gdGhlIGZpbHRlciBhcnJheS4K KyAqCisgKiBSZXR1cm5zIG51bWJlciBvZiBmaWx0ZXJzIGFkZGVkIHRvIGZpbHRlciBhcnJheS4g Q2FuIGJlIGdyZWF0ZXIgdGhhbgorICogMSBpZiBAZmlsdGVyIGNvbnRhaW5zIG1vcmUgdGhhbiBv bmUgZmlsdGVyIHNlcGFyYXRlZCBieSBzZW1pY29sb24uCisgKi8KK2ludCBpZ3RfZGV2aWNlX2Zp bHRlcl9hZGQoY29uc3QgY2hhciAqZmlsdGVyKQoreworCWdjaGFyICoqc3RydiwgKipzOworCWlu dCBjID0gMDsKKworCURFVklDRV9GSUxURVJfQ0hFQ0tfQUxMT0MoKTsKKworCXN0cnYgPSBnX3N0 cnNwbGl0KGZpbHRlciwgIjsiLCAtMSk7CisKKwlzID0gc3RydjsKKwl3aGlsZSAoKnMpIHsKKwkJ Z19wdHJfYXJyYXlfYWRkKGRldmljZV9maWx0ZXJzLCBzdHJkdXAoKnMpKTsKKwkJcysrOworCX0K KwlnX3N0cmZyZWV2KHN0cnYpOworCisJcmV0dXJuIGM7Cit9CisKKy8qKgorICogaWd0X2Rldmlj ZV9maWx0ZXJfZ2V0CisgKiBAbnVtOiBOdW1iZXIgb2YgZmlsdGVyIGZyb20gZmlsdGVyIGFycmF5 CisgKgorICogUmV0dXJucyBmaWx0ZXIgc3RyaW5nIG9yIE5VTEwgaWYgQG51bSBpcyBvdXQgb2Yg cmFuZ2Ugb2YgZmlsdGVyIGFycmF5LgorKi8KK2NvbnN0IGNoYXIgKmlndF9kZXZpY2VfZmlsdGVy X2dldChpbnQgbnVtKQoreworCURFVklDRV9GSUxURVJfQ0hFQ0tfQUxMT0MoKTsKKworCWlmIChu dW0gPCAwIHx8IG51bSA+PSBkZXZpY2VfZmlsdGVycy0+bGVuKQorCQlyZXR1cm4gTlVMTDsKKwor CXJldHVybiBnX3B0cl9hcnJheV9pbmRleChkZXZpY2VfZmlsdGVycywgbnVtKTsKK30KKworc3Rh dGljIGJvb2wgaWd0X2RldmljZV9maWx0ZXJfYXBwbHkoY29uc3QgY2hhciAqZmlsdGVyKQorewor CXN0cnVjdCBmaWx0ZXJfc3BlYyBmc3BlYzsKKwlib29sIHJldDsKKworCWlmICghZmlsdGVyKQor CQlyZXR1cm4gZmFsc2U7CisKKwltZW1zZXQoJmZzcGVjLCAwLCBzaXplb2YoZnNwZWMpKTsKKwly ZXQgPSBnZXRfZmlsdGVyX3NwZWMoZmlsdGVyLCAmZnNwZWMpOworCWlmICghcmV0KSB7CisJCWln dF93YXJuKCJDYW4ndCBzcGxpdCBmaWx0ZXIgWyVzXVxuIiwgZmlsdGVyKTsKKwkJcmV0dXJuIGZh bHNlOworCX0KKworCS8qIENsZWFuIHZpZXcgKi8KKwlnX3B0cl9hcnJheV9yZW1vdmVfcmFuZ2Uo aWd0X2RldnMudmlldywgMCwgaWd0X2RldnMudmlldy0+bGVuKTsKKworCS8qIElmIGZzcGVjLmRh dGEgY29udGFpbnMgIi9zeXMiIHVzZSBkaXJlY3QgcGF0aCBpbnN0ZWFkCisJICogY29udGV4dHVh bCBmaWx0ZXIgKi8KKwlpZiAoIXN0cm5jbXAoZnNwZWMuZGF0YSwgIi9zeXMiLCA0KSkKKwkJZmls dGVyX3N5cygmZnNwZWMsIE5VTEwpOworCWVsc2UgeworCQlzdHJ1Y3QgZmlsdGVyX2Z1bmMgKmZm dW5jOworCQlmZnVuYyA9IGdfaGFzaF90YWJsZV9sb29rdXAoZmlsdGVyX2RlZmluaXRpb25faHQs IGZzcGVjLm5hbWUpOworCQlpZiAoIWZmdW5jKSB7CisJCQlpZ3Rfd2FybigiTm8gZmlsdGVyIHdp dGggbmFtZSBbJXNdXG4iLCBmc3BlYy5uYW1lKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQlm ZnVuYy0+ZmlsdGVyX2Z1bmN0aW9uKCZmc3BlYywgZmZ1bmMpOworCX0KKworCXJldHVybiB0cnVl OworfQorCisjZGVmaW5lIHNhZmVfc3RybmNweShkc3QsIHNyYywgc2l6ZSkgXAorCWlmICgoZHN0 KSAmJiAoc3JjKSkgc3RybmNweSgoZHN0KSwgKHNyYyksIChzaXplKSkKKworLyoqCisgKiBpZ3Rf ZGV2aWNlX2NhcmRfbWF0Y2gKKyAqIEBmaWx0ZXI6IGZpbHRlciBzdHJpbmcKKyAqIEBjYXJkOiBw b2ludGVyIHRvIGlndF9kZXZpY2VfY2FyZCBzdHJ1Y3QKKyAqCisgKiBGdW5jdGlvbiBhcHBsaWVz IGZpbHRlciB0byBtYXRjaCBkZXZpY2UgZnJvbSBkZXZpY2UgYXJyYXkuCisgKgorICogUmV0dXJu czoKKyAqIGZhbHNlIC0gbm8gY2FyZCBwb2ludGVyIHdhcyBwYXNzZWQgb3IgY2FyZCB3YXNuJ3Qg bWF0Y2hlZCwKKyAqIHRydWUgLSBjYXJkIG1hdGNoZWQgYW5kIHJldHVybmVkLgorICovCitib29s IGlndF9kZXZpY2VfY2FyZF9tYXRjaChjb25zdCBjaGFyICpmaWx0ZXIsIHN0cnVjdCBpZ3RfZGV2 aWNlX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IGlndF9kZXZpY2UgKmRldiA9IE5VTEw7CisKKwlp ZiAoIWNhcmQpCisJCXJldHVybiBmYWxzZTsKKwltZW1zZXQoY2FyZCwgMCwgc2l6ZW9mKCpjYXJk KSk7CisKKwlpZ3RfZGV2aWNlc19zY2FuKGZhbHNlKTsKKworCWlmIChpZ3RfZGV2aWNlX2ZpbHRl cl9hcHBseShmaWx0ZXIpID09IGZhbHNlKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIWlndF9k ZXZzLnZpZXctPmxlbikKKwkJcmV0dXJuIGZhbHNlOworCisJLyogV2UgdGFrZSBmaXJzdCBvbmUg aWYgbW9yZSB0aGFuIG9uZSBjYXJkIG1hdGNoZXMgZmlsdGVyICovCisJZGV2ID0gZ19wdHJfYXJy YXlfaW5kZXgoaWd0X2RldnMudmlldywgMCk7CisJY2FyZC0+Y2hpcHNldCA9IERSSVZFUl9BTlk7 CisJaWYgKGRldi0+dnMpCisJCWNhcmQtPmNoaXBzZXQgPSBkZXYtPnZzLT5jaGlwc2V0OworCisJ c2FmZV9zdHJuY3B5KGNhcmQtPnN1YnN5c3RlbSwgZGV2LT5zdWJzeXN0ZW0sIE5BTUVfTUFYKTsK KwlzYWZlX3N0cm5jcHkoY2FyZC0+Y2FyZCwgZGV2LT5kcm1fY2FyZCwgTkFNRV9NQVgpOworCXNh ZmVfc3RybmNweShjYXJkLT5yZW5kZXIsIGRldi0+ZHJtX3JlbmRlciwgTkFNRV9NQVgpOworCisJ cmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9saWIvaWd0X2RldmljZV9zY2FuLmggYi9saWIv aWd0X2RldmljZV9zY2FuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjYy ZjdmMzlhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2lndF9kZXZpY2Vfc2Nhbi5oCkBAIC0wLDAg KzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoK KyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg cGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0 ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0 aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRh dGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNv ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlz IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6 CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRl ZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdh cmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQg Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5P IEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAq IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2lm bmRlZiBfX0lHVF9ERVZJQ0VfU0NBTl9IX18KKyNkZWZpbmUgX19JR1RfREVWSUNFX1NDQU5fSF9f CisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxpZ3QuaD4KKworZW51bSBpZ3RfZGV2 aWNlc19wcmludF90eXBlIHsKKwlJR1RfUFJJTlRfU0lNUExFLAorCUlHVF9QUklOVF9ERVRBSUws Cit9OworCitzdHJ1Y3QgaWd0X2RldmljZV9jYXJkIHsKKwlpbnQgY2hpcHNldDsKKwljaGFyIHN1 YnN5c3RlbVtOQU1FX01BWF07CisJY2hhciBjYXJkW05BTUVfTUFYXTsKKwljaGFyIHJlbmRlcltO QU1FX01BWF07Cit9OworCisvKiBTY2FuIHVkZXYgc3Vic3lzdGVtcy4gRG8gaXQgb25jZSB1bmxl c3MgZm9yY2UgaXMgdHJ1ZSwgd2hhdCByZXNjYW5zCisgKiBkZXZpY2VzIGFnYWluICovCit2b2lk IGlndF9kZXZpY2VzX3NjYW4oYm9vbCBmb3JjZSk7CisKK3ZvaWQgaWd0X2RldmljZXNfcHJpbnQo ZW51bSBpZ3RfZGV2aWNlc19wcmludF90eXBlIHByaW50dHlwZSk7Cit2b2lkIGlndF9kZXZpY2Vz X3ByaW50X3ZlbmRvcnModm9pZCk7Cit2b2lkIGlndF9kZXZpY2VfcHJpbnRfZmlsdGVyX3R5cGVz KHZvaWQpOworCisvKgorICogSGFuZGxlIGRldmljZSBmaWx0ZXIgY29sbGVjdGlvbiBhcnJheS4K KyAqIElHVCBjYW4gc3RvcmUvcmV0cmlldmUgZmlsdGVycyBwYXNzZWQgYnkgdXNlciB1c2luZyAn LS1kZXZpY2UnIGFyZ3MuCisqLworCisvKiBSZXR1cm4gbnVtYmVyIG9mIGZpbHRlcnMgY29sbGVj dGVkICovCitpbnQgaWd0X2RldmljZV9maWx0ZXJfY291bnQodm9pZCk7CisKKy8qIEFkZCBmaWx0 ZXIocykgdG8gdGhlIGFycmF5LiBSZXR1cm5zIG51bWJlciBvZiBmaWx0ZXJzIGFkZGVkICg+MSBp ZgorICogdXNlciBwYXNzZXMgbW9yZSB0aGFuIG9uZSBmaWx0ZXIgc2VwYXJhdGluZWQgYnkgJzsn KSAqLworaW50IGlndF9kZXZpY2VfZmlsdGVyX2FkZChjb25zdCBjaGFyICpmaWx0ZXIpOworCisv KiBHZXQgbi10aCBmaWx0ZXIgc3RvcmVkIGluIHRoZSBhcnJheSBvciBOVUxMICovCitjb25zdCBj aGFyICppZ3RfZGV2aWNlX2ZpbHRlcl9nZXQoaW50IG51bSk7CisKKy8qIFVzZSBmaWx0ZXIgdG8g bWF0Y2ggdGhlIGRldmljZSBhbmQgZmlsbCBjYXJkIHN0cnVjdHVyZSAqLworYm9vbCBpZ3RfZGV2 aWNlX2NhcmRfbWF0Y2goY29uc3QgY2hhciAqZmlsdGVyLCBzdHJ1Y3QgaWd0X2RldmljZV9jYXJk ICpjYXJkKTsKKworI2VuZGlmIC8qIF9fSUdUX0RFVklDRV9TQ0FOX0hfXyAqLwpkaWZmIC0tZ2l0 IGEvbGliL21lc29uLmJ1aWxkIGIvbGliL21lc29uLmJ1aWxkCmluZGV4IDE1NzYyNGU3Li44MjZl YmJlMyAxMDA2NDQKLS0tIGEvbGliL21lc29uLmJ1aWxkCisrKyBiL2xpYi9tZXNvbi5idWlsZApA QCAtMTAsNiArMTAsNyBAQCBsaWJfc291cmNlcyA9IFsKIAknaWd0X2NvbG9yX2VuY29kaW5nLmMn LAogCSdpZ3RfZGVidWdmcy5jJywKIAknaWd0X2RldmljZS5jJywKKwknaWd0X2RldmljZV9zY2Fu LmMnLAogCSdpZ3RfYXV4LmMnLAogCSdpZ3RfZ3B1X3Bvd2VyLmMnLAogCSdpZ3RfZ3QuYycsCmRp ZmYgLS1naXQgYS90b29scy9NYWtlZmlsZS5zb3VyY2VzIGIvdG9vbHMvTWFrZWZpbGUuc291cmNl cwppbmRleCA1MDcwNmY0MS4uMGU2N2I2NTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL01ha2VmaWxlLnNv dXJjZXMKKysrIGIvdG9vbHMvTWFrZWZpbGUuc291cmNlcwpAQCAtMzMsNiArMzMsNyBAQCB0b29s c19wcm9nX2xpc3RzID0JCVwKIAlpbnRlbF93YXRlcm1hcmsJCVwKIAlpbnRlbF9nZW1faW5mbwkJ XAogCWludGVsX2d2dGdfdGVzdCAgICAgXAorCWxzZ3B1CQkJXAogCSQoTlVMTCkKIAogZGlzdF9i aW5fU0NSSVBUUyA9IGludGVsX2dwdV9hYnJ0CmRpZmYgLS1naXQgYS90b29scy9sc2dwdS5jIGIv dG9vbHMvbHNncHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uZTcyM2Yw YjIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9sc2dwdS5jCkBAIC0wLDAgKzEsMTgzIEBACisv KgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNs dWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNv cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAq IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO WSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE IFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFM TAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQg T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVS IERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRlICJpZ3Rf ZGV2aWNlX3NjYW4uaCIKKyNpbmNsdWRlICJpZ3QuaCIKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4K KyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5n Lmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisKK2VudW0geworCU9QVF9QUklOVF9ERVRBSUwgICA9 ICdEJywKKwlPUFRfTElTVF9WRU5ET1JTICAgPSAndicsCisJT1BUX0xJU1RfRklMVEVSUyAgID0g J2wnLAorCU9QVF9ERVZJQ0UgICAgICAgICA9ICdkJywKKwlPUFRfSEVMUCAgICAgICAgICAgPSAn aCcKK307CisKK2Jvb2wgZ19zaG93X3ZlbmRvcnM7Citib29sIGdfbGlzdF9maWx0ZXJzOworYm9v bCBnX2RldmljZTsKK2Jvb2wgZ19oZWxwOworCitzdGF0aWMgY29uc3QgY2hhciAqdXNhZ2Vfc3Ry ID0KKwkidXNhZ2U6IGxzZ3B1IFtvcHRpb25zXVxuXG4iCisJIk9wdGlvbnM6XG4iCisJIiAgLUQs IC0tcHJpbnQtZGV0YWlscyAgICAgICAgIFByaW50IGRldmljZXMgd2l0aCBkZXRhaWxzXG4iCisJ IiAgLXYsIC0tbGlzdC12ZW5kb3JzICAgICAgICAgIExpc3QgcmVjb2duaXplZCB2ZW5kb3JzXG4i CisJIiAgLWwsIC0tbGlzdC1maWx0ZXItdHlwZXMgICAgIExpc3QgcmVnaXN0ZXJlZCBkZXZpY2Ug ZmlsdGVycyB0eXBlc1xuIgorCSIgIC1kLCAtLWRldmljZSBmaWx0ZXIgICAgICAgICBEZXZpY2Ug ZmlsdGVyLCBjYW4gYmUgZ2l2ZW4gbXVsdGlwbGUgdGltZXNcbiIKKwkiICAtaCwgLS1oZWxwICAg ICAgICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdFxuIjsKKworc3Rh dGljIHZvaWQgdGVzdF9kZXZpY2Vfb3BlbihzdHJ1Y3QgaWd0X2RldmljZV9jYXJkICpjYXJkKQor eworCWludCBmZDsKKworCWlmICghY2FyZCkKKwkJcmV0dXJuOworCisJZmQgPSBkcm1fb3Blbl9j YXJkKGNhcmQpOworCWlmIChmZCA+PSAwKSB7CisJCXByaW50ZigiRGV2aWNlICVzIHN1Y2Nlc3Nm dWxseSBvcGVuZWRcbiIsIGNhcmQtPmNhcmQpOworCQljbG9zZShmZCk7CisJfSBlbHNlIHsKKwkJ aWYgKHN0cmxlbihjYXJkLT5jYXJkKSkKKwkJCXByaW50ZigiQ2Fubm90IG9wZW4gY2FyZCAlcyBk ZXZpY2VcbiIsIGNhcmQtPmNhcmQpOworCQllbHNlCisJCQlwcmludGYoIkNhbm5vdCBvcGVuIGNh cmQgZGV2aWNlLCBlbXB0eSBuYW1lXG4iKTsKKwl9CisKKwlmZCA9IGRybV9vcGVuX3JlbmRlcihj YXJkKTsKKwlpZiAoZmQgPj0gMCkgeworCQlwcmludGYoIkRldmljZSAlcyBzdWNjZXNzZnVsbHkg b3BlbmVkXG4iLCBjYXJkLT5yZW5kZXIpOworCQljbG9zZShmZCk7CisJfSBlbHNlIHsKKwkJaWYg KHN0cmxlbihjYXJkLT5yZW5kZXIpKQorCQkJcHJpbnRmKCJDYW5ub3Qgb3BlbiByZW5kZXIgJXMg ZGV2aWNlXG4iLCBjYXJkLT5yZW5kZXIpOworCQllbHNlCisJCQlwcmludGYoIkNhbm5vdCBvcGVu IHJlbmRlciBkZXZpY2UsIGVtcHR5IG5hbWVcbiIpOworCX0KK30KKworc3RhdGljIHZvaWQgcHJp bnRfY2FyZChzdHJ1Y3QgaWd0X2RldmljZV9jYXJkICpjYXJkKQoreworCWlmICghY2FyZCkKKwkJ cmV0dXJuOworCisJcHJpbnRmKCJzdWJzeXN0ZW0gICA6ICVzXG4iLCBjYXJkLT5zdWJzeXN0ZW0p OworCXByaW50ZigiY2hpcHNldCAgICAgOiAleFxuIiwgY2FyZC0+Y2hpcHNldCk7CisJcHJpbnRm KCJkcm0gY2FyZCAgICA6ICVzXG4iLCBjYXJkLT5jYXJkKTsKKwlwcmludGYoImRybSByZW5kZXIg IDogJXNcbiIsIGNhcmQtPnJlbmRlcik7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pCit7CisJc3RhdGljIHN0cnVjdCBvcHRpb24gbG9uZ19vcHRpb25zW10gPSB7CisJCXsi cHJpbnQtZGV0YWlsIiwgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgT1BUX1BSSU5UX0RF VEFJTH0sCisJCXsibGlzdC12ZW5kb3JzIiwgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwg T1BUX0xJU1RfVkVORE9SU30sCisJCXsibGlzdC1maWx0ZXItdHlwZXMiLCBub19hcmd1bWVudCwg ICAgICAgTlVMTCwgT1BUX0xJU1RfRklMVEVSU30sCisJCXsiZGV2aWNlIiwgICAgICAgICAgICBy ZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgT1BUX0RFVklDRX0sCisJCXsiaGVscCIsICAgICAgICAg ICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgT1BUX0hFTFB9LAorCQl7MCwgMCwgMCwgMH0K Kwl9OworCWludCBjLCBpbmRleCA9IDA7CisJY29uc3QgY2hhciAqZW52OworCWVudW0gaWd0X2Rl dmljZXNfcHJpbnRfdHlwZSBwcmludHR5cGUgPSBJR1RfUFJJTlRfU0lNUExFOworCisJd2hpbGUg KChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgIkR2bGQ6aCIsCisJCQkJbG9uZ19vcHRpb25z LCAmaW5kZXgpKSAhPSAtMSkgeworCQlzd2l0Y2goYykgeworCisJCWNhc2UgT1BUX1BSSU5UX0RF VEFJTDoKKwkJCXByaW50dHlwZSA9IElHVF9QUklOVF9ERVRBSUw7CisJCQlicmVhazsKKwkJY2Fz ZSBPUFRfTElTVF9WRU5ET1JTOgorCQkJZ19zaG93X3ZlbmRvcnMgPSB0cnVlOworCQkJYnJlYWs7 CisJCWNhc2UgT1BUX0xJU1RfRklMVEVSUzoKKwkJCWdfbGlzdF9maWx0ZXJzID0gdHJ1ZTsKKwkJ CWJyZWFrOworCQljYXNlIE9QVF9ERVZJQ0U6CisJCQlnX2RldmljZSA9IHRydWU7CisJCQlpZ3Rf ZGV2aWNlX2ZpbHRlcl9hZGQob3B0YXJnKTsKKwkJCWJyZWFrOworCQljYXNlIE9QVF9IRUxQOgor CQkJZ19oZWxwID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGdfaGVscCkgewor CQlwcmludGYoIiVzXG4iLCB1c2FnZV9zdHIpOworCQlleGl0KDApOworCX0KKworCWVudiA9IGdl dGVudigiSUdUX0RFVklDRSIpOworCWlmIChlbnYpIHsKKwkJaWd0X2RldmljZV9maWx0ZXJfYWRk KGVudik7CisJCWdfZGV2aWNlID0gdHJ1ZTsKKwl9CisKKwlpZiAoZ19zaG93X3ZlbmRvcnMpIHsK KwkJaWd0X2RldmljZXNfcHJpbnRfdmVuZG9ycygpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAo Z19saXN0X2ZpbHRlcnMpIHsKKwkJaWd0X2RldmljZV9wcmludF9maWx0ZXJfdHlwZXMoKTsKKwkJ cmV0dXJuIDA7CisJfQorCisJaWd0X2RldmljZXNfc2NhbihmYWxzZSk7CisKKwlpZiAoZ19kZXZp Y2UpIHsKKwkJaW50IG4gPSBpZ3RfZGV2aWNlX2ZpbHRlcl9jb3VudCgpOworCQlwcmludGYoIj09 PSBEZXZpY2UgZmlsdGVyIGxpc3QgPT09XG4iKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBp KyspIHsKKwkJCXByaW50ZigiWyUyZF06ICVzXG4iLCBpLAorCQkJICAgICAgIGlndF9kZXZpY2Vf ZmlsdGVyX2dldChpKSk7CisJCX0KKwkJcHJpbnRmKCJcbiIpOworCisJCXByaW50ZigiPT09IFRl c3RpbmcgZGV2aWNlIG9wZW4gPT09XG4iKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKysp IHsKKwkJCXN0cnVjdCBpZ3RfZGV2aWNlX2NhcmQgY2FyZDsKKwkJCWNvbnN0IGNoYXIgKmZpbHRl ciA9IGlndF9kZXZpY2VfZmlsdGVyX2dldChpKTsKKworCQkJaWYgKCFpZ3RfZGV2aWNlX2NhcmRf bWF0Y2goZmlsdGVyLCAmY2FyZCkpCisJCQkJY29udGludWU7CisJCQlwcmludF9jYXJkKCZjYXJk KTsKKwkJCXRlc3RfZGV2aWNlX29wZW4oJmNhcmQpOworCQkJcHJpbnRmKCItLS1cbiIpOworCQl9 CisKKwkJcmV0dXJuIDA7CisJfQorCisJaWd0X2RldmljZXNfcHJpbnQocHJpbnR0eXBlKTsKKwor CXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWVzb24uYnVpbGQgYi90b29scy9tZXNv bi5idWlsZAppbmRleCA2ZTcyYjI2My4uOWIzYTJhNjkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL21lc29u LmJ1aWxkCisrKyBiL3Rvb2xzL21lc29uLmJ1aWxkCkBAIC0zNiw2ICszNiw3IEBAIHRvb2xzX3By b2dzID0gWwogCSdpbnRlbF9nZW1faW5mbycsCiAJJ2ludGVsX2d2dGdfdGVzdCcsCiAJJ2RwY2Rf cmVnJywKKwknbHNncHUnLAogXQogdG9vbF9kZXBzID0gaWd0X2RlcHMKIAotLSAKMi4yMS4wCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1h aWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=