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 3689D6EF04 for ; Fri, 13 Sep 2019 10:04:20 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Fri, 13 Sep 2019 12:04:13 +0200 Message-Id: <20190913100415.15456-2-zbigniew.kempczynski@intel.com> In-Reply-To: <20190913100415.15456-1-zbigniew.kempczynski@intel.com> References: <20190913100415.15456-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v8 1/3] Introduce 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: Q2hhbmdlIGFkZHMgZGV2aWNlIHNlbGVjdGlvbiBBUEkgYmFzZWQgb24gc2Nhbm5pbmcgZHJtIHN1 YnN5c3RlbQp1c2luZyB1ZGV2IGxpYnJhcnkuCgpTaWduZWQtb2ZmLWJ5OiBaYmlnbmlldyBLZW1w Y3p5xYRza2kgPHpiaWduaWV3LmtlbXBjenluc2tpQGludGVsLmNvbT4KQ2M6IEFya2FkaXVzeiBI aWxlciA8YXJrYWRpdXN6LmhpbGVyQGludGVsLmNvbT4KQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmll bEBmZndsbC5jaD4KQ2M6IFBldHJpIExhdHZhbGEgPHBldHJpLmxhdHZhbGFAaW50ZWwuY29tPgot LS0KIC4uLi9pZ3QtZ3B1LXRvb2xzL2lndC1ncHUtdG9vbHMtZG9jcy54bWwgICAgICB8ICAgIDEg KwogbGliL01ha2VmaWxlLnNvdXJjZXMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiAr CiBsaWIvaWd0X2RldmljZV9zY2FuLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNDAwICsr KysrKysrKysrKysrKysrCiBsaWIvaWd0X2RldmljZV9zY2FuLmggICAgICAgICAgICAgICAgICAg ICAgICAgfCAgIDc0ICsKIGxpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgIDEgKwogNSBmaWxlcyBjaGFuZ2VkLCAxNDc4IGluc2VydGlvbnMoKykKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBsaWIvaWd0X2RldmljZV9zY2FuLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBs aWIvaWd0X2RldmljZV9zY2FuLmgKCmRpZmYgLS1naXQgYS9kb2NzL3JlZmVyZW5jZS9pZ3QtZ3B1 LXRvb2xzL2lndC1ncHUtdG9vbHMtZG9jcy54bWwgYi9kb2NzL3JlZmVyZW5jZS9pZ3QtZ3B1LXRv b2xzL2lndC1ncHUtdG9vbHMtZG9jcy54bWwKaW5kZXggYWM4MzI3MmYuLjRiM2MzOGFmIDEwMDY0 NAotLS0gYS9kb2NzL3JlZmVyZW5jZS9pZ3QtZ3B1LXRvb2xzL2lndC1ncHUtdG9vbHMtZG9jcy54 bWwKKysrIGIvZG9jcy9yZWZlcmVuY2UvaWd0LWdwdS10b29scy9pZ3QtZ3B1LXRvb2xzLWRvY3Mu eG1sCkBAIC0yMyw2ICsyMyw3IEBACiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF9jb3Jl LnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9pZ3RfZGVidWdmcy54bWwiLz4KICAg ICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvaWd0X2RldmljZS54bWwiLz4KKyAgICA8eGk6aW5jbHVk ZSBocmVmPSJ4bWwvaWd0X2RldmljZV9zY2FuLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9 InhtbC9pZ3RfZHJhdy54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvaWd0X2R1bW15 bG9hZC54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvaWd0X2ZiLnhtbCIvPgpkaWZm IC0tZ2l0IGEvbGliL01ha2VmaWxlLnNvdXJjZXMgYi9saWIvTWFrZWZpbGUuc291cmNlcwppbmRl eCBjZjA5NGFiOC4uYTllOTU1N2EgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZS5zb3VyY2VzCisr KyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCkBAIC0yNSw2ICsyNSw4IEBAIGxpYl9zb3VyY2VfbGlz dCA9CSAJXAogCWlndF9kZWJ1Z2ZzLmgJCVwKIAlpZ3RfZGV2aWNlLmMJCVwKIAlpZ3RfZGV2aWNl LmgJCVwKKwlpZ3RfZGV2aWNlX3NjYW4uYwlcCisJaWd0X2RldmljZV9zY2FuLmgJXAogCWlndF9h dXguYwkJXAogCWlndF9hdXguaAkJXAogCWlndF9jb2xvcl9lbmNvZGluZy5jCVwKZGlmZiAtLWdp dCBhL2xpYi9pZ3RfZGV2aWNlX3NjYW4uYyBiL2xpYi9pZ3RfZGV2aWNlX3NjYW4uYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNWNlMzBmNjcKLS0tIC9kZXYvbnVsbAorKysg Yi9saWIvaWd0X2RldmljZV9zY2FuLmMKQEAgLTAsMCArMSwxNDAwIEBACisvKgorICogQ29weXJp Z2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICog Y29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5l eHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJz dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFV VEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFH RVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisg KiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRlICJpZ3QuaCIKKyNpbmNsdWRl ICJpZ3Rfc3lzZnMuaCIKKyNpbmNsdWRlICJpZ3RfZGV2aWNlLmgiCisjaW5jbHVkZSAiaWd0X2Rl dmljZV9zY2FuLmgiCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGxpYnVkZXYuaD4KKyNp bmNsdWRlIDxsaW51eC9saW1pdHMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUg PHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisK Ky8qKgorICogU0VDVElPTjppZ3RfZGV2aWNlX3NjYW4KKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjog RGV2aWNlIHNjYW5uaW5nIGFuZCBzZWxlY3Rpb24KKyAqIEB0aXRsZTogRGV2aWNlIHNlbGVjdGlv bgorICogQGluY2x1ZGU6IGlndC5oCisgKgorICogIyBEZXZpY2Ugc2Nhbm5pbmcKKyAqCisgKiBE ZXZpY2Ugc2Nhbm5pbmcgaXRlcmF0ZXMgb3ZlciBkcm0gc3Vic3lzdGVtIHVzaW5nIHVkZXYgbGli cmFyeQorICogdG8gYWNxdWlyZSBkcm0gZGV2aWNlcy4KKyAqIEZvciBlYWNoIGRybSBkZXZpY2Ug d2UgYWxzbyBnZXQgYW5kIHN0b3JlIGl0cyBwYXJlbnQgaW4gYSBkZXZpY2UgYXJyYXkKKyAqIHRv IGFsbG93IGRldmljZSBzZWxlY3Rpb24gaW4gbW9yZSBjb250ZXh0dWFsIHdheS4KKyAqCisgKiBQ YXJlbnQgZGV2aWNlcyBhcmUgYnVzIGRldmljZXMgKGxpa2UgcGNpLCBwbGF0Zm9ybSwgZXRjLikg YW5kIGNvbnRhaW4gYSBsb3QKKyAqIG9mIHVzYWJsZSBpbmZvcm1hdGlvbiBjb21wYXJpbmcgdG8g ZHJtIGRldmljZS4KKyAqCisgKiBVZGV2IGtlZXBzIHByb3BlcnRpZXMgYW5kIHN5c2F0dHJzIGZv ciB0aGUgZGV2aWNlIGFzIGEgbGlzdCB3aGF0IGlzIG5vdAorICogY29udmluaWVudCBmb3Iga2V5 L3ZhbHVlIHNlYXJjaGluZy4gU28gdWRldiBkZXZpY2UgcHJvcGVydGllcyBhbmQgc3lzYXR0cnMK KyAqIGFyZSByZXdyaXR0ZW4gdG8gaW50ZXJuYWwgaGFzaCB0YWJsZXMgaW4gaWd0X2RldmljZSBz dHJ1Y3R1cmUuCisgKgorICogIyBGaWx0ZXJzCisgKgorICogRGV2aWNlIHNlbGVjdGlvbiBjYW4g YmUgZG9uZSB1c2luZyBmaWx0ZXJzLiBGaWx0ZXJzIGFsbG93IHNvcGhpc3RpY2F0ZWQKKyAqIGRl dmljZSBtYXRjaGluZyBhbmQgc2VsZWN0aW9uLiBQcmV2aW91c2x5IG1lbnRpb25lZCBwcm9wZXJ0 aWVzIGFuZCBzeXNhdHRycworICogY29sbGVjdGVkIGluIGlndF9kZXZpY2UgaGFzaCB0YWJsZXMg c2ltcGxpZnkgd3JpdGluZyBmaWx0ZXIgaW1wbGVtZW50YXRpb24uCisgKgorICogRGlyZWN0IGRl dmljZSBzZWxlY3Rpb24gZmlsdGVyCisgKiBpcyBzcGVjaWFsIGZpbHRlciBhbmQgaXQgaXMgY2hl Y2tlZCBmaXJzdC4gVGhlbiBjb250ZXh0dWFsIGZpbHRlciBpcyBjaG9zZW4KKyAqIGRlcGVuZGlu ZyBvbiBmaWx0ZXIgbmFtZS4KKyAqCisgKiBEaXJlY3QgZGV2aWNlIHNlbGVjdGlvbiBmaWx0ZXIg bXVzdCBiZToKKyAqCisgKiB8WzwhLS0gbGFuZ3VhZ2U9InBsYWluIiAtLT4KKyAqIHN1YnN5c3Rl bTovc3lzCisgKiBdfAorICoKKyAqIFNvLCB3aGVuIHVzZXIgcGFzc2VzIGZpbHRlciB3aGljaCBs b29rcyBsaWtlIGZvbGxvd3M6CisgKiB8WzwhLS0gbGFuZ3VhZ2U9InBsYWluIiAtLT4KKyAqIC0g ZHJtOi9zeXMvZGV2aWNlcy9wY2kwMDAwOjAwLzAwMDA6MDA6MDIuMC9kcm0vY2FyZDAKKyAqIC0g cGNpOi9zeXMvZGV2aWNlcy9wY2kwMDAwOjAwLzAwMDA6MDA6MDIuMAorICogLSBwbGF0Zm9ybTov c3lzL2RldmljZXMvcGxhdGZvcm0vdmdlbQorICogXXwKKyAqCisgKiBkZXZpY2UgZnJvbSBhcnJh eSB3aGljaCBoYXMgc3Vic3lzdGVtIGFuZCBzeXMgcGF0aCB3aWxsIGJlIHJldHVybmVkLgorICoK KyAqIFdoZW4gL3N5cyBpcyBub3Qgc3BlY2lmaWVkIGFmdGVyIGNvbG9uIGNvbnRleHR1YWwgZmls dGVycyBhcmUgdGFrZW4KKyAqIGludG8gYWNjb3VudC4gRHJtIGRldmljZSBvY2N1cnMgaW4gdGhl IHN5c3RlbSB3aGVuIGFwcHJvcHJpYXRlIG1vZHVsZQorICogaXMgbG9hZGVkIGFuZCBkZXZpY2Ug aXMgZGV0ZWN0ZWQgKG9yIGV4cG9zZWQgZm9yIHBsYXRmb3JtIGRldmljZXMpLiBMb2FkaW5nCisg KiBkcml2ZXJzIGluIGRpZmZlcmVudCBvcmRlciBjYW4gYmUgcHJvYmxlbWF0aWMgZnJvbSBDSSBw b2ludCBvZiB2aWV3LCB3aGVyZQorICogZXhwZWN0YXRpb24gaXMgdG8gZ2V0IHNhbWUgZGV2aWNl IGVzcGVjaWFsbHkgd2hlbiBtdWx0aXBsZSBncHUgZGV2aWNlcworICogZXhpc3RzIGluIHRoZSBz eXN0ZW0uIEZvciBzdWNoIGRldmljZXMgaXRzIHBhcmVudCBsb2NhdGlvbiBvbiBwY2kgYnVzCisg KiBpcyBjb25zdGFudCBhbmQgYWxsb3dzIGFwcHJvcHJpYXRlIGRldmljZSBzZWxlY3Rpb24gdXNp bmcgZm9yIGV4YW1wbGUKKyAqIHZlbmRvciAvIGRldmljZSBpZHMuCisgKgorICogRm9yIHRlc3Rz IHdoaWNoIG9wZW5zIG1vcmUgdGhhbiBvbmUgZGV2aWNlIGRldmljZSBmaWx0ZXIgY29sbGVjdGlv biBBUEkKKyAqIGNhbiBiZSB1c2VkLiBZb3UgY2FuIGFkZCBhIGZpbHRlciB0byB0aGUgYXJyYXkg dXNpbmcgaWd0X2RldmljZV9maWx0ZXJfYWRkKCksCisgKiBnZXQgdGhlIG50aCBmaWx0ZXIgc3Rv cmVkIHVzaW5nIGlndF9kZXZpY2VfZmlsdGVyX2dldCgpIGFuZCBnZXQKKyAqICNpZ3RfZGV2aWNl X2NhcmQgdXNpbmcgaWd0X2RldmljZV9jYXJkX21hdGNoKCkgd2l0aCB0aGF0IGZpbHRlci4KKyAq CisgKiBJbXBsZW1lbnRlZCBmaWx0ZXJzOgorICoKKyAqIC0gZHJtOiBnZXQgZHJtIC9kZXYvZHJp Ly4uLiBkZXZpY2UgZGlyZWN0bHkKKyAqCisgKiAgIHxbPCEtLSBsYW5ndWFnZT0icGxhaW4iIC0t PgorICogICBkcm06L2Rldi9kcmkvLi4uCisgKiAgIF18CisgKgorICogLSBwY2k6IHNlbGVjdCBk ZXZpY2UgdXNpbmcgcGNpIHByb3BlcnRpZXMKKyAqICAgfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIg LS0+CisgKiAgIHBjaTpbdmVuZG9yPSUwNHgvbmFtZV1bLGRldmljZT0lMDR4XVssY2FyZD0lZF0K KyAqICAgXXwKKyAqCisgKiAgIEZpbHRlciBhbGxvd3MgZGV2aWNlIHNlbGVjdGlvbiB1c2luZyB2 ZW5kb3IgKGhleCBvciBuYW1lKSwgZGV2aWNlIGlkCisgKiAgIChoZXgpIGFuZCBudGgtY2FyZCBm cm9tIGFsbCBtYXRjaGVzLiBGb3IgZXhhbXBsZSBpZiB0aGVyZSdyZSA0IHBjaQorICogICBjYXJk cyBpbnN0YWxsZWQgKGxldCB0d28gY2FyZHMgaGF2ZSAxMjM0IGFuZCBvdGhlciB0d28gMTIzNSBk ZXZpY2UgaWQsCisgKiAgIGFsbCBvZiB0aGVtIG9mIHZlbmRvciBJbnRlbCkgeW91IGNhbiBzZWxl Y3Qgb25lIHVzaW5nOgorICoKKyAqICAgfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIgLS0+CisgKiAg IHBjaTp2ZW5kb3I9SW50ZWwsZGV2aWNlPTEyMzQsY2FyZD0wCisgKiAgIF18CisgKgorICogICBv cgorICoKKyAqICAgfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIgLS0+CisgKiAgIHBjaTp2ZW5kb3I9 ODA4NixkZXZpY2U9MTIzNCxjYXJkPTAKKyAqICAgXXwKKyAqCisgKiAgIFRoaXMgdGFrZXMgZmly c3QgZGV2aWNlIHdpdGggMTIzNCBpZCBmb3IgSW50ZWwgdmVuZG9yICg4MDg2KS4KKyAqCisgKiAg IHxbPCEtLSBsYW5ndWFnZT0icGxhaW4iIC0tPgorICogICBwY2k6dmVuZG9yPUludGVsLGRldmlj ZT0xMjM0LGNhcmQ9MQorICogICBdfAorICoKKyAqICAgb3IKKyAqCisgKiAgIHxbPCEtLSBsYW5n dWFnZT0icGxhaW4iIC0tPgorICogICBwY2k6dmVuZG9yPTgwODYsZGV2aWNlPTEyMzQsY2FyZD0x CisgKiAgIF18CisgKgorICogICBJdCBzZWxlY3RzIHNlY29uZCBvbmUuCisgKgorICogICBBcyBv cmRlciBvbiBwY2kgYnVzIGRvZXNuJ3QgY2hhbmdlICh1bmxlc3MgeW91J2xsIGFkZCBuZXcgZGV2 aWNlIG9yCisgKiAgIHJlb3JkZXIgZXhpc3Rpbmcgb25lKSBkZXZpY2Ugc2VsZWN0aW9uIHVzaW5n IHRoaXMgZmlsdGVyIHdpbGwgYWx3YXlzCisgKiAgIHJldHVybiB5b3Ugc2FtZSBkZXZpY2UgcmVn YXJkbGVzcyBtb2R1bGUgbG9hZGluZyB0aW1lLgorICoKKyAqIC0gdmdlbTogc2VsZWN0IHZpcnR1 YWwgZ2VtIGRldmljZQorICoKKyAqICAgfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIgLS0+CisgKiAg IHZnZW06W2NhcmQ9JWRdCisgKiAgIF18CisgKgorICogICBGb3IgZXhhbXBsZToKKyAqCisgKiAg IHxbPCEtLSBsYW5ndWFnZT0icGxhaW4iIC0tPgorICogICB2Z2VtOgorICogICB2Z2VtOmNhcmQ9 MAorICogICBdfAorICoKKyAqICAgQm90aCBzZWxlY3RzIGZpcnN0IHZnZW0gZGV2aWNlIChubyBp ZGVhIGlmIG1vcmUgdGhhbiBvbmUgZGV2aWNlIHdpbGwKKyAqICAgYmUgdmlzaWJsZSwgaWYgeWVz IHVzZSBjYXJkPSBhcmd1bWVudCB0byBwb2ludCByaWdodCBvbmUpLgorICoKKyAqIC0gdmttczog c2VsZWN0IHZpcnR1YWwga21zIGRldmljZQorICoKKyAqICAgfFs8IS0tIGxhbmd1YWdlPSJwbGFp biIgLS0+CisgKiAgIHZrbXM6W2NhcmQ9JWRdCisgKiAgIF18CisgKgorICogICBGb3IgZXhhbXBs ZToKKyAqCisgKiAgIHxbPCEtLSBsYW5ndWFnZT0icGxhaW4iIC0tPgorICogICB2a21zOgorICog ICB2a21zOmNhcmQ9MAorICogICBdfAorICoKKyAqICAgQm90aCBzZWxlY3RzIGZpcnN0IHZrbXMg ZGV2aWNlLiBTYW1lIGFzIGZvciB2Z2VtIEkgYXNzdW1lIG1vcmUgdGhhbgorICogICBvbmUgZGV2 aWNlIGNhbiBhcHBlYXIgaW4gdGhlIGZ1dHVyZS4KKyAqCisgKiAtIHZjNDogc2VsZWN0IFZDNCBk ZXZpY2UKKyAqCisgKiAgIHxbPCEtLSBsYW5ndWFnZT0icGxhaW4iIC0tPgorICogICB2YzQ6W2Nh cmQ9JWRdCisgKiAgIF18CisgKgorICogICBGb3IgZXhhbXBsZToKKyAqCisgKiAgIHxbPCEtLSBs YW5ndWFnZT0icGxhaW4iIC0tPgorICogICB2YzQ6CisgKiAgIHZjNDpjYXJkPTAKKyAqICAgXXwK KyAqCisgKiAgIEJvdGggc2VsZWN0cyBmaXJzdCBWQzQgZGV2aWNlLiBBdCB0aGUgbW9tZW50IFJh c3BlcnJ5IFBJIGhhcyBvbmx5CisgKiAgIG9uZSBncHUsIGJ1dCBmaWx0ZXIgaXMgcmVhZHkgaWYg dGhlcmUgd2lsbCBiZSBtb3JlLgorICovCisKKyNpZmRlZiBERUJVR19ERVZJQ0VfU0NBTgorI2Rl ZmluZSBEQkcoLi4uKSBcCit7IFwKKwlzdHJ1Y3QgdGltZXZhbCB0bTsgXAorCWdldHRpbWVvZmRh eSgmdG0sIE5VTEwpOyBcCisJcHJpbnRmKCIlMTBsZC4lMDNsZDogIiwgdG0udHZfc2VjLCB0bS50 dl91c2VjKTsgXAorCXByaW50ZihfX1ZBX0FSR1NfXyk7IFwKKwl9CisKKyNlbHNlCisjZGVmaW5l IERCRyguLi4pIHt9CisjZW5kaWYKKworI2RlZmluZSBzdHJlcXVhbCh4LCB5KSAoKHgpICYmICh5 KSAmJiAhc3RyY21wKCh4KSwgKHkpKSkKKyNkZWZpbmUgSUdUX0RSTV9QQVRIICIvZGV2L2RyaSIK Kworc3RhdGljIEdIYXNoVGFibGUgKnN5c2F0dHJzX2JsYWNrbGlzdF9odDsgLyogc3lzYXR0cnMg d2UgZG9uJ3Qgd2FudCB0byByZWFkICovCitzdGF0aWMgR0hhc2hUYWJsZSAqZ3B1X3ZlbmRvcl9o dDsgICAgICAgICAvKiBzZWFyY2ggaWQgLT4gdmVuZG9yX3NwZWMgbWFwcGluZyAqLworc3RhdGlj IEdIYXNoVGFibGUgKmZpbHRlcl9kZWZpbml0aW9uX2h0OyAvKiBzdXBwb3J0ZWQgZmlsdGVycyAo cGNpPS4uLiwgZXRjLikgKi8KKworLyogR2VuZXJpYyBuYW1lLT52YWx1ZSBzdHJ1Y3QgKi8KK3N0 cnVjdCBuYW1lX3ZhbHVlIHsKKwljb25zdCBjaGFyICpuYW1lOworCWdwb2ludGVyICp2YWx1ZTsK K307CisKKy8qIFZlbmRvciBzcGVjaWZpYyBkYXRhICovCitzdHJ1Y3QgdmVuZG9yX3NwZWMgewor CWNvbnN0IGNoYXIgKnZlbmRvcjsKKwljb25zdCBjaGFyICptYXRjaDsKKwlpbnQgY2hpcHNldDsK K307CisKK3N0cnVjdCBpZ3RfZGV2aWNlIHsKKwkvKiBGaWxsZWQgZm9yIGRybSBkZXZpY2VzICov CisJc3RydWN0IGlndF9kZXZpY2UgKnBhcmVudDsKKworCS8qIFBvaW50IHRvIHZlbmRvciBzcGVj IGlmIGNhbiBiZSBmb3VuZCAqLworCWNvbnN0IHN0cnVjdCB2ZW5kb3Jfc3BlYyAqdnM7CisKKwkv KiBQcm9wZXJ0aWVzIC8gc3lzYXR0cnMgcmV3cml0ZW4gZnJvbSB1ZGV2IGxpc3RzICovCisJR0hh c2hUYWJsZSAqcHJvcHNfaHQ7CisJR0hhc2hUYWJsZSAqYXR0cnNfaHQ7CisKKwkvKiBNb3N0IHVz YWJsZSB2YXJpYWJsZXMgZnJvbSB1ZGV2IGRldmljZSAqLworCWNoYXIgKnN1YnN5c3RlbTsKKwlj aGFyICpzeXNwYXRoOworCWNoYXIgKmRldm5vZGU7CisKKwkvKiAvZGV2L2RyaS8uLi4gcGF0aHMg Ki8KKwljaGFyICpkcm1fY2FyZDsKKwljaGFyICpkcm1fcmVuZGVyOworCisJLyogRm9yIHBjaSBz dWJzeXN0ZW0gKi8KKwljaGFyICp2ZW5kb3I7CisJY2hhciAqZGV2aWNlOworfTsKKworLyogU2Nh bm5lZCBkZXZpY2VzICovCitzdHJ1Y3QgaWd0X2RldmljZXMgeworCUdQdHJBcnJheSAqZGV2czsJ CS8qIGFsbCAqLworCUdQdHJBcnJheSAqdmlldzsJCS8qIGZpbHRlcmVkICovCisJYm9vbCBkZXZz X3NjYW5uZWQ7Cit9OworCisvKiBTY2FubmVkIGRldmljZXMgaG9sZGVyICovCitzdGF0aWMgc3Ry dWN0IGlndF9kZXZpY2VzIGlndF9kZXZzOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHZlbmRvcl9z cGVjIHZfaW50ZWwgPSB7CisJLnZlbmRvciA9ICJJbnRlbCIsCisJLmNoaXBzZXQgPSBEUklWRVJf SU5URUwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdmVuZG9yX3NwZWMgdl9hbWQgPSB7CisJ LnZlbmRvciA9ICJBTUQiLAorCS5jaGlwc2V0ID0gRFJJVkVSX0FNREdQVQorfTsKKworc3RhdGlj IGNvbnN0IHN0cnVjdCB2ZW5kb3Jfc3BlYyB2X3ZnZW0gPSB7CisJLnZlbmRvciA9ICJWaXJ0dWFs LUdFTSIsCisJLmNoaXBzZXQgPSBEUklWRVJfVkdFTQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVj dCB2ZW5kb3Jfc3BlYyB2X3ZjNCA9IHsKKwkudmVuZG9yID0gIkJyb2FkY29tIiwKKwkuY2hpcHNl dCA9IERSSVZFUl9WQzQKK307CisKKy8qIE1hcHBpbmcgdmVuZG9yIGlkID0+IHZlbmRvcl9zcGVj IHNob3VsZCBiZSB1bmlxdWUgKHZlbmRvciBzdHJpbmcgbWF0Y2hpbmcKKyAqIGlzIHdyaXR0ZW4g YXJvdW5kIHRoaXMpLgorICoKKyAqIEtleXMgbXVzdCBiZSBkZWZpbmVkIGFzIGZvbGxvd3M6Cisg KiBQQ0kgZGV2aWNlczogUENJX1NMT1RfSUQgLT4gdmVuZG9yX3NwZWMuCisgKi8KK2NvbnN0IHN0 cnVjdCBuYW1lX3ZhbHVlIGdwdV92ZW5kb3JfbGlzdFtdID0geworCXsgIjgwODYiLCAoZ3BvaW50 ZXIpICZ2X2ludGVsIH0sCisJeyAiMTAwMiIsIChncG9pbnRlcikgJnZfYW1kIH0sCisJeyBOVUxM LCB9LAorfTsKKworLyogR2VuZXJpYyBoYXNoIHRhYmxlIGZpbGwgZnVuY3Rpb24sIHJlcXVpcmVz IG5hbWUgLyB2YWx1ZSBwdHJzIGFycmF5ICovCitzdGF0aWMgdm9pZCBmaWxsX2h0KEdIYXNoVGFi bGUgKipodCwgY29uc3Qgc3RydWN0IG5hbWVfdmFsdWUgKmRhdGEpCit7CisJaWYgKCpodCkKKwkJ cmV0dXJuOworCisJKmh0ID0gZ19oYXNoX3RhYmxlX25ldyhnX3N0cl9oYXNoLCBnX3N0cl9lcXVh bCk7CisJaWd0X2Fzc2VydCgqaHQpOworCisJd2hpbGUgKGRhdGEtPm5hbWUpIHsKKwkJZ19oYXNo X3RhYmxlX2luc2VydCgqaHQsCisJCQkJICAgIChncG9pbnRlcikgZGF0YS0+bmFtZSwKKwkJCQkg ICAgZGF0YS0+dmFsdWUpOworCQlkYXRhKys7CisJfQorfQorCisjZGVmaW5lIGdldF92ZW5kb3Jf c3BlYyhwcm9wKSBcCisJZ19oYXNoX3RhYmxlX2xvb2t1cChncHVfdmVuZG9yX2h0LCBwcm9wKQor CisvKiBHbyB0aHJvdWdoIHdob2xlIHZlbmRvciBsaXN0IGFuZCBjb21wYXJlIGFnYWluc3QgdmVu ZG9yIGZpZWxkLgorICogVXNlZCBtb3N0bHkgd2l0aCB2ZW5kb3I9Li4uIGZpbHRlciBwYXJhbWV0 ZXIgd2hlbiBQQ0kgaWQgaXMgbm90IG1hdGNoZWQuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpn ZXRfcGNpX3ZlbmRvcl9pZF9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY29uc3Qgc3Ry dWN0IG5hbWVfdmFsdWUgKmRhdGEgPSAmZ3B1X3ZlbmRvcl9saXN0WzBdOworCisJd2hpbGUgKGRh dGEtPm5hbWUpIHsKKwkJc3RydWN0IHZlbmRvcl9zcGVjICp2cyA9IChzdHJ1Y3QgdmVuZG9yX3Nw ZWMgKikgZGF0YS0+dmFsdWU7CisKKwkJaWYgKCFzdHJjYXNlY21wKG5hbWUsIHZzLT52ZW5kb3Ip KQorCQkJcmV0dXJuIGRhdGEtPm5hbWU7CisJCWRhdGErKzsKKwl9CisKKwlyZXR1cm4gTlVMTDsK K30KKworLyogUmVhZGluZyBzeXNhdHRyIHZhbHVlcyBjYW4gdGFrZSB0aW1lIChldmVuIHNlY29u ZHMpLAorICogd2Ugd2FudCB0byBhdm9pZCByZWFkaW5nIHN1Y2gga2V5cy4KKyAqLworc3RhdGlj IHZvaWQgcG9wdWxhdGVfYmxhY2tsaXN0X2tleXModm9pZCkKK3sKKwljb25zdCBjaGFyICprZXlz W10gPSB7ICJjb25maWciLCAibW9kYWxpYXMiLCAibW9kZXMiLAorCQkJICAgICAgICJyZXNvdXJj ZSIsCisJCQkgICAgICAgInJlc291cmNlMCIsICJyZXNvdXJjZTEiLCAicmVzb3VyY2UyIiwKKwkJ CSAgICAgICAicmVzb3VyY2UzIiwgInJlc291cmNlNCIsICJyZXNvdXJjZTUiLAorCQkJICAgICAg ICJyZXNvdXJjZTBfd2MiLCAicmVzb3VyY2UxX3djIiwgInJlc291cmNlMl93YyIsCisJCQkgICAg ICAgInJlc291cmNlM193YyIsICJyZXNvdXJjZTRfd2MiLCAicmVzb3VyY2U1X3djIiwKKwkJCSAg ICAgICAiZHJpdmVyIiwKKwkJCSAgICAgICAidWV2ZW50IiwgTlVMTH07CisJY29uc3QgY2hhciAq a2V5OworCWludCBpID0gMDsKKworCWlmIChzeXNhdHRyc19ibGFja2xpc3RfaHQpCisJCXJldHVy bjsKKworCXN5c2F0dHJzX2JsYWNrbGlzdF9odCA9IGdfaGFzaF90YWJsZV9uZXcoZ19zdHJfaGFz aCwgZ19zdHJfZXF1YWwpOworCWlndF9hc3NlcnQoc3lzYXR0cnNfYmxhY2tsaXN0X2h0KTsKKwor CXdoaWxlICgoa2V5ID0ga2V5c1tpKytdKSkKKwkJZ19oYXNoX3RhYmxlX2FkZChzeXNhdHRyc19i bGFja2xpc3RfaHQsIChncG9pbnRlcikga2V5KTsKK30KKworI2RlZmluZSBpc19vbl9ibGFja2xp c3Qoa2V5KSBcCisJZ19oYXNoX3RhYmxlX2NvbnRhaW5zKHN5c2F0dHJzX2JsYWNrbGlzdF9odCwg a2V5KQorCitzdGF0aWMgc3RydWN0IGlndF9kZXZpY2UgKmlndF9kZXZpY2VfbmV3KHZvaWQpCit7 CisJc3RydWN0IGlndF9kZXZpY2UgKmRldjsKKworCWRldiA9IGNhbGxvYygxLCBzaXplb2Yoc3Ry dWN0IGlndF9kZXZpY2UpKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIE5VTEw7CisKKwlkZXYtPmF0 dHJzX2h0ID0gZ19oYXNoX3RhYmxlX25ld19mdWxsKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsLAor CQkJCQkgICAgICBmcmVlLCBmcmVlKTsKKwlkZXYtPnByb3BzX2h0ID0gZ19oYXNoX3RhYmxlX25l d19mdWxsKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsLAorCQkJCQkgICAgICBmcmVlLCBmcmVlKTsK KworCWlmIChkZXYtPmF0dHJzX2h0ICYmIGRldi0+cHJvcHNfaHQpCisJCXJldHVybiBkZXY7CisK KwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgaWd0X2RldmljZV9hZGRfcHJvcChzdHJ1 Y3QgaWd0X2RldmljZSAqZGV2LAorCQkJCWNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFs dWUpCit7CisJaWYgKCFrZXkgfHwgIXZhbHVlKQorCQlyZXR1cm47CisKKwlnX2hhc2hfdGFibGVf aW5zZXJ0KGRldi0+cHJvcHNfaHQsIHN0cmR1cChrZXkpLCBzdHJkdXAodmFsdWUpKTsKK30KKwor c3RhdGljIHZvaWQgaWd0X2RldmljZV9hZGRfYXR0cihzdHJ1Y3QgaWd0X2RldmljZSAqZGV2LAor CQkJCWNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJY29uc3QgY2hhciAq diA9IHZhbHVlOworCisJaWYgKCFrZXkpCisJCXJldHVybjsKKworCS8qIEl0J3MgcG9zc2libGUg d2UgaGF2ZSBzeW1saW5rIGF0IGtleSBmaWxlbmFtZSwgYnV0IHVkZXYKKwkgKiBsaWJyYXJ5IHJl c29sdmVzIG9ubHkgZmV3IG9mIHRoZW0KKwkgKi8KKwlpZiAoIXYpIHsKKwkJc3RydWN0IHN0YXQg c3Q7CisJCWNoYXIgcGF0aFtQQVRIX01BWF07CisJCWNoYXIgbGlua3RvW1BBVEhfTUFYXTsKKwkJ aW50IGxlbjsKKworCQlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIlcy8lcyIsIGRldi0+ c3lzcGF0aCwga2V5KTsKKwkJaWYgKGxzdGF0KHBhdGgsICZzdCkgIT0gMCkKKwkJCXJldHVybjsK KworCQlsZW4gPSByZWFkbGluayhwYXRoLCBsaW5rdG8sIHNpemVvZihsaW5rdG8pKTsKKwkJaWYg KGxlbiA8PSAwIHx8IGxlbiA9PSAoc3NpemVfdCkgc2l6ZW9mKGxpbmt0bykpCisJCQlyZXR1cm47 CisJCWxpbmt0b1tsZW5dID0gJ1wwJzsKKwkJdiA9IHN0cnJjaHIobGlua3RvLCAnLycpOworCQlp ZiAodiA9PSBOVUxMKQorCQkJcmV0dXJuOworCQl2Kys7CisJfQorCisJZ19oYXNoX3RhYmxlX2lu c2VydChkZXYtPmF0dHJzX2h0LCBzdHJkdXAoa2V5KSwgc3RyZHVwKHYpKTsKK30KKworLyogSXRl cmF0ZSBvdmVyIHVkZXYgcHJvcGVydGllcyBsaXN0IGFuZCByZXdyaXRlIGl0IHRvIGlndF9kZXZp Y2UgcHJvcGVydGllcworICogaGFzaCB0YWJsZSBmb3IgaW5zdGFudCBhY2Nlc3MuCisgKi8KK3N0 YXRpYyB2b2lkIGdldF9wcm9wcyhzdHJ1Y3QgdWRldl9kZXZpY2UgKmRldiwgc3RydWN0IGlndF9k ZXZpY2UgKmlkZXYpCit7CisJc3RydWN0IHVkZXZfbGlzdF9lbnRyeSAqZW50cnk7CisKKwllbnRy eSA9IHVkZXZfZGV2aWNlX2dldF9wcm9wZXJ0aWVzX2xpc3RfZW50cnkoZGV2KTsKKwl3aGlsZSAo ZW50cnkpIHsKKwkJY29uc3QgY2hhciAqbmFtZSA9IHVkZXZfbGlzdF9lbnRyeV9nZXRfbmFtZShl bnRyeSk7CisJCWNvbnN0IGNoYXIgKnZhbHVlID0gdWRldl9saXN0X2VudHJ5X2dldF92YWx1ZShl bnRyeSk7CisKKwkJaWd0X2RldmljZV9hZGRfcHJvcChpZGV2LCBuYW1lLCB2YWx1ZSk7CisJCWVu dHJ5ID0gdWRldl9saXN0X2VudHJ5X2dldF9uZXh0KGVudHJ5KTsKKwkJREJHKCJwcm9wOiAlcywg dmFsOiAlc1xuIiwgbmFtZSwgdmFsdWUpOworCX0KK30KKworLyogU2FtZSBhcyBnZXRfcHJvcHMo KSwgYnV0IHJld3JpdGVzIHN5c2F0dHJzLiBSZXNvbHZlcyBzeW1ib2xpYyBsaW5rcworICogbm90 IGhhbmRsZWQgYnkgdWRldiBnZXRfc3lzYXR0cl92YWx1ZSgpLgorICogRnVuY3Rpb24gc2tpcHMg c3lzYXR0cnMgZnJvbSBibGFja2xpc3QgaHQgKGFjcXVpcmluZyBzb21lIHZhbHVlcyBjYW4gdGFr ZQorICogc2Vjb25kcykuCisgKi8KK3N0YXRpYyB2b2lkIGdldF9hdHRycyhzdHJ1Y3QgdWRldl9k ZXZpY2UgKmRldiwgc3RydWN0IGlndF9kZXZpY2UgKmlkZXYpCit7CisJc3RydWN0IHVkZXZfbGlz dF9lbnRyeSAqZW50cnk7CisKKwllbnRyeSA9IHVkZXZfZGV2aWNlX2dldF9zeXNhdHRyX2xpc3Rf ZW50cnkoZGV2KTsKKwl3aGlsZSAoZW50cnkpIHsKKwkJY29uc3QgY2hhciAqa2V5ID0gdWRldl9s aXN0X2VudHJ5X2dldF9uYW1lKGVudHJ5KTsKKwkJY29uc3QgY2hhciAqdmFsdWU7CisKKwkJaWYg KGlzX29uX2JsYWNrbGlzdChrZXkpKSB7CisJCQllbnRyeSA9IHVkZXZfbGlzdF9lbnRyeV9nZXRf bmV4dChlbnRyeSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXZhbHVlID0gdWRldl9kZXZpY2Vf Z2V0X3N5c2F0dHJfdmFsdWUoZGV2LCBrZXkpOworCQlpZ3RfZGV2aWNlX2FkZF9hdHRyKGlkZXYs IGtleSwgdmFsdWUpOworCQllbnRyeSA9IHVkZXZfbGlzdF9lbnRyeV9nZXRfbmV4dChlbnRyeSk7 CisJCURCRygiYXR0cjogJXMsIHZhbDogJXNcbiIsIGtleSwgdmFsdWUpOworCX0KK30KKworI2Rl ZmluZSBnZXRfcHJvcChkZXYsIHByb3ApICgoY2hhciAqKSBnX2hhc2hfdGFibGVfbG9va3VwKGRl di0+cHJvcHNfaHQsIHByb3ApKQorI2RlZmluZSBnZXRfYXR0cihkZXYsIGF0dHIpICgoY2hhciAq KSBnX2hhc2hfdGFibGVfbG9va3VwKGRldi0+YXR0cnNfaHQsIGF0dHIpKQorI2RlZmluZSBnZXRf cHJvcF9zdWJzeXN0ZW0oZGV2KSBnZXRfcHJvcChkZXYsICJTVUJTWVNURU0iKQorI2RlZmluZSBp c19kcm1fc3Vic3lzdGVtKGRldikgICAoIXN0cmNtcChnZXRfcHJvcF9zdWJzeXN0ZW0oZGV2KSwg ImRybSIpKQorI2RlZmluZSBpc19wY2lfc3Vic3lzdGVtKGRldikgICAoIXN0cmNtcChnZXRfcHJv cF9zdWJzeXN0ZW0oZGV2KSwgInBjaSIpKQorI2RlZmluZSBpc19wbGF0Zm9ybV9zdWJzeXN0ZW0o ZGV2KSBcCisJKCFzdHJjbXAoZ2V0X3Byb3Bfc3Vic3lzdGVtKGRldiksICJwbGF0Zm9ybSIpKQor CisvKiBHZXRzIFBDSV9JRCBwcm9wZXJ0eSwgc3BsaXRzIHRvIHh4eHg6eXl5eSBhbmQgc3RvcmVz CisgKiB4eHh4IHRvIGRldi0+dmVuZG9yIGFuZCB5eXl5IHRvIGRldi0+ZGV2aWNlIGZvcgorICog ZmFzdGVyIGFjY2Vzcy4KKyAqLworc3RhdGljIHZvaWQgc2V0X3ZlbmRvcl9kZXZpY2Uoc3RydWN0 IGlndF9kZXZpY2UgKmRldikKK3sKKwljb25zdCBjaGFyICpwY2lfaWQgPSBnZXRfcHJvcChkZXYs ICJQQ0lfSUQiKTsKKworCWlmICghcGNpX2lkIHx8IHN0cmxlbihwY2lfaWQpICE9IDkpCisJCXJl dHVybjsKKwlkZXYtPnZlbmRvciA9IHN0cm5kdXAocGNpX2lkLCA0KTsKKwlkZXYtPmRldmljZSA9 IHN0cm5kdXAocGNpX2lkICsgNSwgNCk7Cit9CisKKy8qIEFsbG9jYXRlIGFycmF5cyBmb3Iga2Vl cGluZyBzY2FubmVkIGRldmljZXMgKi8KK3N0YXRpYyBib29sIHByZXBhcmVfc2Nhbih2b2lkKQor eworCWlmICghaWd0X2RldnMuZGV2cykKKwkJaWd0X2RldnMuZGV2cyA9IGdfcHRyX2FycmF5X3Np emVkX25ldyg0KTsKKwlpZiAoIWlndF9kZXZzLnZpZXcpCisJCWlndF9kZXZzLnZpZXcgPSBnX3B0 cl9hcnJheV9zaXplZF9uZXcoNCk7CisKKwlpZiAoIWlndF9kZXZzLmRldnMgfHwgIWlndF9kZXZz LnZpZXcpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisvKiBDcmVhdGUg bmV3IGlndF9kZXZpY2UgZnJvbSB1ZGV2IGRldmljZS4KKyAqIEZpbGxzIHN0cnVjdHVyZSB3aXRo IG1vc3QgdXNhYmxlIHVkZXYgZGV2aWNlIHZhcmlhYmxlcywgcHJvcGVydGllcworICogYW5kIHN5 c2F0dHJzLgorICovCitzdGF0aWMgc3RydWN0IGlndF9kZXZpY2UgKmlndF9kZXZpY2VfbmV3X2Zy b21fdWRldihzdHJ1Y3QgdWRldl9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaWd0X2RldmljZSAq aWRldiA9IGlndF9kZXZpY2VfbmV3KCk7CisKKwlpZ3RfYXNzZXJ0KGlkZXYpOworCWlkZXYtPnN5 c3BhdGggPSBnX3N0cmR1cCh1ZGV2X2RldmljZV9nZXRfc3lzcGF0aChkZXYpKTsKKwlpZGV2LT5z dWJzeXN0ZW0gPSBnX3N0cmR1cCh1ZGV2X2RldmljZV9nZXRfc3Vic3lzdGVtKGRldikpOworCWlk ZXYtPmRldm5vZGUgPSBnX3N0cmR1cCh1ZGV2X2RldmljZV9nZXRfZGV2bm9kZShkZXYpKTsKKwor CWlmIChpZGV2LT5kZXZub2RlICYmIHN0cnN0cihpZGV2LT5kZXZub2RlLCAiL2Rldi9kcmkvY2Fy ZCIpKQorCQlpZGV2LT5kcm1fY2FyZCA9IGdfc3RyZHVwKGlkZXYtPmRldm5vZGUpOworCWVsc2Ug aWYgKGlkZXYtPmRldm5vZGUgJiYgc3Ryc3RyKGlkZXYtPmRldm5vZGUsICIvZGV2L2RyaS9yZW5k ZXIiKSkKKwkJaWRldi0+ZHJtX3JlbmRlciA9IGdfc3RyZHVwKGlkZXYtPmRldm5vZGUpOworCisJ Z2V0X3Byb3BzKGRldiwgaWRldik7CisJZ2V0X2F0dHJzKGRldiwgaWRldik7CisKKwlyZXR1cm4g aWRldjsKK30KKworLyogSXRlcmF0ZSBvdmVyIGFsbCBpZ3RfZGV2aWNlcyBhcnJheSBhbmQgZmlu ZCBvbmUgbWF0Y2hlZCB0bworICogc3Vic3lzdGVtIGFuZCBzeXNwYXRoLgorICovCitzdGF0aWMg c3RydWN0IGlndF9kZXZpY2UgKmlndF9kZXZpY2VfZmluZChjb25zdCBjaGFyICpzdWJzeXN0ZW0s CisJCQkJCSAgY29uc3QgY2hhciAqc3lzcGF0aCkKK3sKKwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2 OworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBpZ3RfZGV2cy5kZXZzLT5sZW47IGkrKykgeworCQlk ZXYgPSBnX3B0cl9hcnJheV9pbmRleChpZ3RfZGV2cy5kZXZzLCBpKTsKKwkJaWYgKCFzdHJjbXAo ZGV2LT5zdWJzeXN0ZW0sIHN1YnN5c3RlbSkgJiYKKwkJCSFzdHJjbXAoZGV2LT5zeXNwYXRoLCBz eXNwYXRoKSkKKwkJCXJldHVybiBkZXY7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKiBGb3Ig ZWFjaCBkcm0gaWd0X2RldmljZSBhZGQgb3IgdXBkYXRlIGl0cyBwYXJlbnQgaWd0X2RldmljZSB0 byB0aGUgYXJyYXkuCisgKiBBcyBjYXJkL3JlbmRlciBkcm0gZGV2aWNlcyBtb3N0bHkgaGF2ZSBz YW1lIHBhcmVudCAodmttcyBpcyBhbiBleGNlcHRpb24pCisgKiBsaW5rIHRvIGl0IGFuZCB1cGRh dGUgY29ycmVzcG9uZGluZyBkcm1fY2FyZCAvIGRybV9yZW5kZXIgZmllbGRzLgorICovCitzdGF0 aWMgdm9pZCB1cGRhdGVfb3JfYWRkX3BhcmVudChzdHJ1Y3QgdWRldl9kZXZpY2UgKmRldiwKKwkJ CQkgc3RydWN0IGlndF9kZXZpY2UgKmlkZXYpCit7CisJc3RydWN0IHVkZXZfZGV2aWNlICpwYXJl bnRfZGV2OworCXN0cnVjdCBpZ3RfZGV2aWNlICpwYXJlbnRfaWRldjsKKwljb25zdCBjaGFyICpz dWJzeXN0ZW0sICpzeXNwYXRoLCAqZGV2bmFtZTsKKworCXBhcmVudF9kZXYgPSB1ZGV2X2Rldmlj ZV9nZXRfcGFyZW50KGRldik7CisJaWd0X2Fzc2VydChwYXJlbnRfZGV2KTsKKworCXN1YnN5c3Rl bSA9IHVkZXZfZGV2aWNlX2dldF9zdWJzeXN0ZW0ocGFyZW50X2Rldik7CisJc3lzcGF0aCA9IHVk ZXZfZGV2aWNlX2dldF9zeXNwYXRoKHBhcmVudF9kZXYpOworCisJcGFyZW50X2lkZXYgPSBpZ3Rf ZGV2aWNlX2ZpbmQoc3Vic3lzdGVtLCBzeXNwYXRoKTsKKwlpZiAoIXBhcmVudF9pZGV2KSB7CisJ CXBhcmVudF9pZGV2ID0gaWd0X2RldmljZV9uZXdfZnJvbV91ZGV2KHBhcmVudF9kZXYpOworCQlp ZiAoaXNfcGNpX3N1YnN5c3RlbShwYXJlbnRfaWRldikpIHsKKwkJCXNldF92ZW5kb3JfZGV2aWNl KHBhcmVudF9pZGV2KTsKKwkJCXBhcmVudF9pZGV2LT52cyA9IGdldF92ZW5kb3Jfc3BlYyhwYXJl bnRfaWRldi0+dmVuZG9yKTsKKwkJfQorCQlnX3B0cl9hcnJheV9hZGQoaWd0X2RldnMuZGV2cywg cGFyZW50X2lkZXYpOworCX0KKwlkZXZuYW1lID0gdWRldl9kZXZpY2VfZ2V0X2Rldm5vZGUoZGV2 KTsKKwlpZiAoc3Ryc3RyKGRldm5hbWUsICIvZGV2L2RyaS9jYXJkIikpCisJCXBhcmVudF9pZGV2 LT5kcm1fY2FyZCA9IGdfc3RyZHVwKGRldm5hbWUpOworCWVsc2UgaWYgKHN0cnN0cihkZXZuYW1l LCAiL2Rldi9kcmkvcmVuZGVyIikpCisJCXBhcmVudF9pZGV2LT5kcm1fcmVuZGVyID0gZ19zdHJk dXAoZGV2bmFtZSk7CisKKwlpZGV2LT5wYXJlbnQgPSBwYXJlbnRfaWRldjsKK30KKworc3RhdGlj IGdpbnQgZGV2c19jb21wYXJlKGdjb25zdHBvaW50ZXIgYSwgZ2NvbnN0cG9pbnRlciBiKQorewor CXN0cnVjdCBpZ3RfZGV2aWNlICpkZXYxLCAqZGV2MjsKKwlpbnQgcmV0OworCisJZGV2MSA9ICoo c3RydWN0IGlndF9kZXZpY2UgKiopIGE7CisJZGV2MiA9ICooc3RydWN0IGlndF9kZXZpY2UgKiop IGI7CisJcmV0ID0gc3RyY21wKGRldjEtPnN1YnN5c3RlbSwgZGV2Mi0+c3Vic3lzdGVtKTsKKwlp ZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHN0cmNtcChkZXYxLT5zeXNwYXRoLCBk ZXYyLT5zeXNwYXRoKTsKK30KKworLyogQ29yZSBzY2FubmluZyBmdW5jdGlvbi4KKyAqCisgKiBB bGwgc2Nhbm5lZCBkZXZpY2VzIGFyZSBrZXB0IGluc2lkZSBpZ3RfZGV2cy5kZXZzIHBvaW50ZXIg YXJyYXkuCisgKiBFYWNoIGFkZGVkIGRldmljZSBpcyBpZ3RfZGV2aWNlIHN0cnVjdHVyZSwgd2hp Y2ggY29udHJhcnkgdG8gdWRldiBkZXZpY2UKKyAqIGhhcyBwcm9wZXJ0aWVzIC8gc3lzYXR0cnMg c3RvcmVkIGluc2lkZSBoYXNoIHRhYmxlIGluc3RlYWQgb2YgbGlzdC4KKyAqCisgKiBGdW5jdGlv biBpdGVyYXRlcyBvdmVyIGRldmljZXMgb24gJ2RybScgc3Vic3lzdGVtLiBGb3IgZWFjaCBkcm0g ZGV2aWNlCisgKiBpdHMgcGFyZW50IGlzIHRha2VuIChidXMgZGV2aWNlKSBhbmQgc3RvcmVkIGlu c2lkZSBzYW1lIGFycmF5LgorICogRnVuY3Rpb24gc29ydHMgYWxsIGZvdW5kIGRldmljZXMgdG8g a2VlcCBzYW1lIG9yZGVyIG9mIGJ1cyBkZXZpY2VzCisgKiBmb3IgcHJvdmlkaW5nIHByZWRpY3Rh YmxlIHNlYXJjaC4KKyAqLworc3RhdGljIHZvaWQgc2Nhbl9kcm1fZGV2aWNlcyh2b2lkKQorewor CXN0cnVjdCB1ZGV2ICp1ZGV2OworCXN0cnVjdCB1ZGV2X2VudW1lcmF0ZSAqZW51bWVyYXRlOwor CXN0cnVjdCB1ZGV2X2xpc3RfZW50cnkgKmRldmljZXMsICpkZXZfbGlzdF9lbnRyeTsKKwlpbnQg cmV0OworCisJdWRldiA9IHVkZXZfbmV3KCk7CisJaWd0X2Fzc2VydCh1ZGV2KTsKKworCWVudW1l cmF0ZSA9IHVkZXZfZW51bWVyYXRlX25ldyh1ZGV2KTsKKwlpZ3RfYXNzZXJ0KGVudW1lcmF0ZSk7 CisKKwlEQkcoIlNjYW5uaW5nIGRybSBzdWJzeXN0ZW1cbiIpOworCXJldCA9IHVkZXZfZW51bWVy YXRlX2FkZF9tYXRjaF9zdWJzeXN0ZW0oZW51bWVyYXRlLCAiZHJtIik7CisJaWd0X2Fzc2VydCgh cmV0KTsKKworCXVkZXZfZW51bWVyYXRlX2FkZF9tYXRjaF9wcm9wZXJ0eShlbnVtZXJhdGUsICJE RVZOQU1FIiwgIi9kZXYvZHJpLyoiKTsKKwlpZ3RfYXNzZXJ0KCFyZXQpOworCisJcmV0ID0gdWRl dl9lbnVtZXJhdGVfc2Nhbl9kZXZpY2VzKGVudW1lcmF0ZSk7CisJaWd0X2Fzc2VydCghcmV0KTsK KworCWRldmljZXMgPSB1ZGV2X2VudW1lcmF0ZV9nZXRfbGlzdF9lbnRyeShlbnVtZXJhdGUpOwor CWlmICghZGV2aWNlcykKKwkJcmV0dXJuOworCisJdWRldl9saXN0X2VudHJ5X2ZvcmVhY2goZGV2 X2xpc3RfZW50cnksIGRldmljZXMpIHsKKwkJY29uc3QgY2hhciAqcGF0aDsKKwkJc3RydWN0IHVk ZXZfZGV2aWNlICpkZXY7CisJCXN0cnVjdCBpZ3RfZGV2aWNlICppZGV2OworCisJCXBhdGggPSB1 ZGV2X2xpc3RfZW50cnlfZ2V0X25hbWUoZGV2X2xpc3RfZW50cnkpOworCQlkZXYgPSB1ZGV2X2Rl dmljZV9uZXdfZnJvbV9zeXNwYXRoKHVkZXYsIHBhdGgpOworCQlpZGV2ID0gaWd0X2RldmljZV9u ZXdfZnJvbV91ZGV2KGRldik7CisJCXVwZGF0ZV9vcl9hZGRfcGFyZW50KGRldiwgaWRldik7CisJ CWdfcHRyX2FycmF5X2FkZChpZ3RfZGV2cy5kZXZzLCBpZGV2KTsKKworCQl1ZGV2X2RldmljZV91 bnJlZihkZXYpOworCX0KKwl1ZGV2X2VudW1lcmF0ZV91bnJlZihlbnVtZXJhdGUpOworCXVkZXZf dW5yZWYodWRldik7CisKKwlnX3B0cl9hcnJheV9zb3J0KGlndF9kZXZzLmRldnMsIGRldnNfY29t cGFyZSk7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBpZ3RfZGV2cy5kZXZzLT5sZW47IGkrKykgewor CQlnX3B0cl9hcnJheV9hZGQoaWd0X2RldnMudmlldywKKwkJCQlnX3B0cl9hcnJheV9pbmRleChp Z3RfZGV2cy5kZXZzLCBpKSk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IG5hbWVfdmFsdWUgZmls dGVyX2RlZmluaXRpb25fbGlzdFtdOworc3RhdGljIHZvaWQgcG9wdWxhdGVfZ3B1X2RhdGEodm9p ZCkKK3sKKwlpZiAoZ3B1X3ZlbmRvcl9odCkKKwkJcmV0dXJuOworCWZpbGxfaHQoJmdwdV92ZW5k b3JfaHQsICZncHVfdmVuZG9yX2xpc3RbMF0pOworCWZpbGxfaHQoJmZpbHRlcl9kZWZpbml0aW9u X2h0LCAmZmlsdGVyX2RlZmluaXRpb25fbGlzdFswXSk7Cit9CisKK3N0YXRpYyB2b2lkIGlndF9k ZXZpY2VfZnJlZShzdHJ1Y3QgaWd0X2RldmljZSAqZGV2KQoreworCWZyZWUoZGV2LT5kZXZub2Rl KTsKKwlmcmVlKGRldi0+c3Vic3lzdGVtKTsKKwlmcmVlKGRldi0+c3lzcGF0aCk7CisJZnJlZShk ZXYtPmRybV9jYXJkKTsKKwlmcmVlKGRldi0+ZHJtX3JlbmRlcik7CisJZnJlZShkZXYtPnZlbmRv cik7CisJZnJlZShkZXYtPmRldmljZSk7CisJZ19oYXNoX3RhYmxlX2Rlc3Ryb3koZGV2LT5hdHRy c19odCk7CisJZ19oYXNoX3RhYmxlX2Rlc3Ryb3koZGV2LT5wcm9wc19odCk7Cit9CisKKy8qKgor ICogaWd0X2RldmljZXNfc2NhbgorICogQGZvcmNlOiBlbmZvcmNlIHNjYW5uaW5nIGRldmljZXMK KyAqCisgKiBGdW5jdGlvbiBzY2FucyB1ZGV2IGluIHNlYXJjaCBvZiBncHUgZGV2aWNlcy4gRm9y IGZpcnN0IHJ1biBpdCBjYW4gYmUKKyAqIGNhbGxlZCB3aXRoIEBmb3JjZSA9IGZhbHNlLiBJZiBz b21ldGhpbmcgY2hhbmdlcyBkdXJpbmcgdGhlIHRoZSB0ZXN0CisgKiBvciB0ZXN0IGRvZXMgc29t ZSBtb2R1bGUgbG9hZGluZyAobmV3IGRybSBkZXZpY2VzIG9jY3VycyBkdXJpbmcgZXhlY3V0aW9u KQorICogZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYWdhaW4gd2l0aCBAZm9yY2UgPSB0cnVlIHRv IHJlZnJlc2ggZGV2aWNlIGFycmF5LgorICovCit2b2lkIGlndF9kZXZpY2VzX3NjYW4oYm9vbCBm b3JjZSkKK3sKKwlpZiAoZm9yY2UgJiYgaWd0X2RldnMuZGV2c19zY2FubmVkKSB7CisJCWZvciAo aW50IGkgPSAwOyBpIDwgaWd0X2RldnMuZGV2cy0+bGVuOyBpKyspIHsKKwkJCXN0cnVjdCBpZ3Rf ZGV2aWNlICpkZXYgPQorCQkJCQlnX3B0cl9hcnJheV9pbmRleChpZ3RfZGV2cy5kZXZzLCBpKTsK KwkJCWlndF9kZXZpY2VfZnJlZShkZXYpOworCQkJZnJlZShkZXYpOworCQl9CisJCWlndF9kZXZz LmRldnNfc2Nhbm5lZCA9IGZhbHNlOworCQlnX3B0cl9hcnJheV9mcmVlKGlndF9kZXZzLnZpZXcs IHRydWUpOworCQlnX3B0cl9hcnJheV9mcmVlKGlndF9kZXZzLmRldnMsIHRydWUpOworCQlpZ3Rf ZGV2cy52aWV3ID0gTlVMTDsKKwkJaWd0X2RldnMuZGV2cyA9IE5VTEw7CisJfQorCisJaWYgKGln dF9kZXZzLmRldnNfc2Nhbm5lZCkKKwkJcmV0dXJuOworCisJcG9wdWxhdGVfYmxhY2tsaXN0X2tl eXMoKTsgICAgICAvL2tleXMgZnJvbSBzeXNhdHRyIHdlIHNraXAKKwlwb3B1bGF0ZV9ncHVfZGF0 YSgpOworCisJcHJlcGFyZV9zY2FuKCk7CisJc2Nhbl9kcm1fZGV2aWNlcygpOworCisJaWd0X2Rl dnMuZGV2c19zY2FubmVkID0gdHJ1ZTsKK30KKworI2RlZmluZSBwcl9zaW1wbGUoaywgdikgcHJp bnRmKCIgICAgJS0xNnM6ICVzXG4iLCBrLCB2KQorI2RlZmluZSBwcl9zaW1wbGUyKGssIHYxLCB2 MikgcHJpbnRmKCIgICAgJS0xNnM6ICVzOiVzXG4iLCBrLCB2MSwgdjIpCisjZGVmaW5lIHByX3Np bXBsZV9wcm9wKGRldiwga2V5KSBwcl9zaW1wbGUoa2V5LCBnZXRfcHJvcChkZXYsIGtleSkpCisj ZGVmaW5lIHByX3NpbXBsZV9hdHRyKGRldiwga2V5KSBwcl9zaW1wbGUoa2V5LCBnZXRfYXR0cihk ZXYsIGtleSkpCisKK3N0YXRpYyB2b2lkIGlndF9kZXZzX3ByaW50X3NpbXBsZShHUHRyQXJyYXkg KnZpZXcpCit7CisJc3RydWN0IGlndF9kZXZpY2UgKmRldjsKKwlpbnQgaTsKKworCWlmICghdmll dykKKwkJcmV0dXJuOworCisJaWYgKCF2aWV3LT5sZW4pIHsKKwkJcHJpbnRmKCJObyBHUFUgZGV2 aWNlcyBmb3VuZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgdmlldy0+ bGVuOyBpKyspIHsKKwkJZGV2ID0gZ19wdHJfYXJyYXlfaW5kZXgodmlldywgaSk7CisJCXByaW50 ZigiJXM6JXNcbiIsIGRldi0+c3Vic3lzdGVtLCBkZXYtPnN5c3BhdGgpOworCQlpZiAoZGV2LT5k cm1fY2FyZCkKKwkJCXByX3NpbXBsZSgiZHJtIGNhcmQiLCBkZXYtPmRybV9jYXJkKTsKKwkJaWYg KGRldi0+ZHJtX3JlbmRlcikKKwkJCXByX3NpbXBsZSgiZHJtIHJlbmRlciIsIGRldi0+ZHJtX3Jl bmRlcik7CisJCWlmIChpc19kcm1fc3Vic3lzdGVtKGRldikpIHsKKwkJCXByX3NpbXBsZTIoInBh cmVudCIsIGRldi0+cGFyZW50LT5zdWJzeXN0ZW0sCisJCQkJICAgZGV2LT5wYXJlbnQtPnN5c3Bh dGgpOworCQl9IGVsc2UgeworCQkJaWYgKGlzX3BjaV9zdWJzeXN0ZW0oZGV2KSkgeworCQkJCXBy X3NpbXBsZSgidmVuZG9yIiwgZGV2LT52ZW5kb3IpOworCQkJCXByX3NpbXBsZSgiZGV2aWNlIiwg ZGV2LT5kZXZpY2UpOworCQkJfQorCQl9CisJCXByaW50ZigiXG4iKTsKKwl9Cit9CisKKyNkZWZp bmUgcHJfZGV0YWlsKGssIHYpIHByaW50ZigiJS0zMnM6ICVzXG4iLCBrLCB2KQorCitzdGF0aWMg dm9pZCBwcmludF9odChHSGFzaFRhYmxlICpodCkKK3sKKwlHTGlzdCAqa2V5cyA9IGdfaGFzaF90 YWJsZV9nZXRfa2V5cyhodCk7CisKKwlrZXlzID0gZ19saXN0X3NvcnQoa2V5cywgKEdDb21wYXJl RnVuYykgc3RyY21wKTsKKwl3aGlsZSAoa2V5cykgeworCQljaGFyICprID0gKGNoYXIgKikga2V5 cy0+ZGF0YTsKKwkJY2hhciAqdiA9IGdfaGFzaF90YWJsZV9sb29rdXAoaHQsIGspOworCisJCXBy X2RldGFpbChrLCB2KTsKKwkJa2V5cyA9IGdfbGlzdF9uZXh0KGtleXMpOworCX0KKwlnX2xpc3Rf ZnJlZShrZXlzKTsKK30KKworc3RhdGljIHZvaWQgaWd0X2RldnNfcHJpbnRfZGV0YWlsKEdQdHJB cnJheSAqdmlldykKK3sKKwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2OworCWludCBpOworCisJaWYg KCF2aWV3KQorCQlyZXR1cm47CisKKwlpZiAoIXZpZXctPmxlbikgeworCQlwcmludGYoIk5vIEdQ VSBkZXZpY2VzIGZvdW5kXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IDA7IGkgPCB2 aWV3LT5sZW47IGkrKykgeworCQlkZXYgPSBnX3B0cl9hcnJheV9pbmRleCh2aWV3LCBpKTsKKwkJ cHJpbnRmKCI9PT09PT09PT09ICVzOiVzID09PT09PT09PT1cbiIsCisJCSAgICAgICBkZXYtPnN1 YnN5c3RlbSwgZGV2LT5zeXNwYXRoKTsKKwkJaWYgKCFpc19kcm1fc3Vic3lzdGVtKGRldikpIHsK KwkJCXByX2RldGFpbCgiY2FyZCBkZXZpY2UiLCBkZXYtPmRybV9jYXJkKTsKKwkJCXByX2RldGFp bCgicmVuZGVyIGRldmljZSIsIGRldi0+ZHJtX3JlbmRlcik7CisJCX0KKworCQlwcmludGYoIlxu W3Byb3BlcnRpZXNdXG4iKTsKKwkJcHJpbnRfaHQoZGV2LT5wcm9wc19odCk7CisJCXByaW50Zigi XG5bYXR0cmlidXRlc11cbiIpOworCQlwcmludF9odChkZXYtPmF0dHJzX2h0KTsKKwkJcHJpbnRm KCJcbiIpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBwcmludF9mdW5jIHsKKwl2b2lkICgqcHJu KShHUHRyQXJyYXkgKnZpZXcpOworfSBwcmludF9mdW5jdGlvbnNbXSA9IHsKKwlbSUdUX1BSSU5U X1NJTVBMRV0gPSB7IC5wcm4gPSBpZ3RfZGV2c19wcmludF9zaW1wbGUgfSwKKwlbSUdUX1BSSU5U X0RFVEFJTF0gPSB7IC5wcm4gPSBpZ3RfZGV2c19wcmludF9kZXRhaWwgfSwKK307CisKKy8qKgor ICogaWd0X2RldmljZXNfcHJpbnQKKyAqIEBwcmludHR5cGU6IElHVF9QUklOVF9TSU1QTEUgb3Ig SUdUX1BSSU5UX0RFVEFJTAorICoKKyAqIEZ1bmN0aW9uIGNhbiBiZSB1c2VkIGJ5IGV4dGVybmFs IHRvb2wgdG8gcHJpbnQgZGV2aWNlIGFycmF5IGluIHNpbXBsZQorICogb3IgZGV0YWlsZWQgZm9y bS4gVGhpcyBmdW5jdGlvbiBpcyBhZGRlZCBoZXJlIHRvIGF2b2lkIGV4cG9zaW5nCisgKiBpbnRl cm5hbCBpbXBsZW1lbnRhdGlvbiBkYXRhIHN0cnVjdHVyZXMuCisgKi8KK3ZvaWQgaWd0X2Rldmlj ZXNfcHJpbnQoZW51bSBpZ3RfZGV2aWNlc19wcmludF90eXBlIHByaW50dHlwZSkKK3sKKwlwcmlu dF9mdW5jdGlvbnNbcHJpbnR0eXBlXS5wcm4oaWd0X2RldnMudmlldyk7Cit9CisKKy8qKgorICog aWd0X2RldmljZXNfcHJpbnRfdmVuZG9ycworICoKKyAqIFByaW50IHBjaSBpZCAtPiB2ZW5kb3Ig bWFwcGluZ3MuIFZlbmRvciBuYW1lcyBwcmludGVkIGJ5IHRoaXMgZnVuY3Rpb24KKyAqIGNhbiBi ZSB1c2VkIGZvciBmaWx0ZXJzIGxpa2UgcGNpIHdoaWNoIGFsbG93cyBwYXNzaW5nIHZlbmRvciAt IGxpa2UKKyAqIHZlbmRvciBpZCAoODA4Nikgb3IgYXMgYSBzdHJpbmcgKEludGVsKS4KKyAqLwor dm9pZCBpZ3RfZGV2aWNlc19wcmludF92ZW5kb3JzKHZvaWQpCit7CisJY29uc3Qgc3RydWN0IG5h bWVfdmFsdWUgKmxpc3QgPSAmZ3B1X3ZlbmRvcl9saXN0WzBdOworCisJcHJpbnRmKCJSZWNvZ25p emVkIHZlbmRvcnM6XG4iKTsKKwlwcmludGYoIiUtOHMgJS0xNnNcbiIsICJQQ0kgSUQiLCAidmVu ZG9yIik7CisJd2hpbGUgKGxpc3QtPm5hbWUpIHsKKwkJc3RydWN0IHZlbmRvcl9zcGVjICp2cyA9 IChzdHJ1Y3QgdmVuZG9yX3NwZWMgKikgbGlzdC0+dmFsdWU7CisKKwkJaWYgKHZzKQorCQkJcHJp bnRmKCIlLThzICUtMTZzXG4iLCBsaXN0LT5uYW1lLCB2cy0+dmVuZG9yKTsKKwkJbGlzdCsrOwor CX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGSUxURVJfU1BFQ19OQU1F X0xFTiAzMgorI2RlZmluZSBGSUxURVJfU1BFQ19EQVRBX0xFTiAyNTYKK3N0cnVjdCBmaWx0ZXJf c3BlYyB7CisJY2hhciBuYW1lW0ZJTFRFUl9TUEVDX05BTUVfTEVOXTsKKwljaGFyIGRhdGFbRklM VEVSX1NQRUNfREFUQV9MRU5dOworfTsKKworc3RydWN0IGZpbHRlcl9kZWZpbml0aW9uIHsKKwlH UHRyQXJyYXkgKigqZmlsdGVyX2Z1bmN0aW9uKShzdHJ1Y3QgZmlsdGVyX3NwZWMgKmZzcGVjLAor CQkJCSAgICAgIHN0cnVjdCBmaWx0ZXJfZGVmaW5pdGlvbiAqZmRlZik7CisJY29uc3QgY2hhciAq aGVscDsKKwljb25zdCBjaGFyICpkZXRhaWw7CisKKwljb25zdCBjaGFyICpwcm9wZXJ0eTsKKwlj b25zdCBjaGFyICp2YWx1ZTsKK307CisKK3N0cnVjdCBmaWx0ZXJfZGF0YSB7CisJY2hhciAqdmVu ZG9yOworCWNoYXIgKmRldmljZTsKKwljaGFyICpjYXJkOworCWNoYXIgKmRybTsKK307CisKK3N0 YXRpYyBHSGFzaFRhYmxlICpzcGxpdF9maWx0ZXJfZGF0YShjb25zdCBjaGFyICpkYXRhKQorewor CUdIYXNoVGFibGUgKmh0ID0gZ19oYXNoX3RhYmxlX25ld19mdWxsKGdfc3RyX2hhc2gsIGdfc3Ry X2VxdWFsLAorCQkJCQkgICAgICAgZnJlZSwgZnJlZSk7CisJZ2NoYXIgKipzOworCWdjaGFyICoq c3RydiA9IGdfc3Ryc3BsaXQoZGF0YSwgIiwiLCAtMSk7CisKKwlzID0gc3RydjsKKwl3aGlsZSAo KnMpIHsKKwkJY2hhciAqaywgKnY7CisKKwkJdiA9IHN0cmNocigqcywgJz0nKTsKKwkJaWYgKCF2 KSB7CisJCQlzKys7CisJCQljb250aW51ZTsKKwkJfQorCQlrID0gc3RybmR1cCgqcywgdiAtICgq cykpOworCQl2ID0gc3RyZHVwKHYgKyAxKTsKKwkJZ19oYXNoX3RhYmxlX2luc2VydChodCwgaywg dik7CisJCXMrKzsKKwl9CisJZ19zdHJmcmVldihzdHJ2KTsKKworCXJldHVybiBodDsKK30KKwor c3RhdGljIGJvb2wgZ2V0X2ZpbHRlcl9zcGVjKGNvbnN0IGNoYXIgKmZpbHRlciwgc3RydWN0IGZp bHRlcl9zcGVjICpzcGVjKQoreworCWlmICghZmlsdGVyIHx8ICFzcGVjKQorCQlyZXR1cm4gZmFs c2U7CisKKwltZW1zZXQoc3BlYywgMCwgc2l6ZW9mKCpzcGVjKSk7CisKKwlpZiAoc3NjYW5mKGZp bHRlciwgIiUzMVteOl06JTI1NXMiLCBzcGVjLT5uYW1lLCBzcGVjLT5kYXRhKSA+PSAxKQorCQly ZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgaXNfdmVuZG9y X21hdGNoZWQoc3RydWN0IGlndF9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqdmVuZG9yKQorewor CWNvbnN0IGNoYXIgKnZlbmRvcl9pZDsKKworCWlmICghZGV2LT52ZW5kb3IgfHwgIXZlbmRvcikK KwkJcmV0dXJuIGZhbHNlOworCisJLyogRmlyc3Qgd2UgY29tcGFyZSB2ZW5kb3IgaWQsIGxpa2Ug ODA4NiAqLworCWlmICghc3RyY2FzZWNtcChkZXYtPnZlbmRvciwgdmVuZG9yKSkKKwkJcmV0dXJu IHRydWU7CisKKwkvKiBMaWtlbHkgd2UgaGF2ZSB2ZW5kb3Igc3RyaW5nIGluc3RlYWQgb2YgaWQg Ki8KKwl2ZW5kb3JfaWQgPSBnZXRfcGNpX3ZlbmRvcl9pZF9ieV9uYW1lKHZlbmRvcik7CisJaWYg KCF2ZW5kb3JfaWQpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiAhc3RyY2FzZWNtcChkZXYt PnZlbmRvciwgdmVuZG9yX2lkKTsKK30KKworLyogRmlsdGVyIHdoaWNoIG1hdGNoZXMgc3Vic3lz dGVtOi9zeXMvLi4uIHBhdGguCisgKiBVc2VkIGFzIGZpcnN0IGZpbHRlciBpbiBjaGFpbi4KKyAq Lworc3RhdGljIEdQdHJBcnJheSAqZmlsdGVyX3N5cyhzdHJ1Y3QgZmlsdGVyX3NwZWMgKmZzcGVj LAorCQkJICAgICBzdHJ1Y3QgZmlsdGVyX2RlZmluaXRpb24gKmZkZWYpCit7CisJc3RydWN0IGln dF9kZXZpY2UgKmRldjsKKwkodm9pZCkgZmRlZjsKKworCURCRygiZmlsdGVyIHN5c1xuIik7CisJ aWYgKCFzdHJsZW4oZnNwZWMtPmRhdGEpKQorCQlyZXR1cm4gaWd0X2RldnMudmlldzsKKworCWRl diA9IGlndF9kZXZpY2VfZmluZChmc3BlYy0+bmFtZSwgZnNwZWMtPmRhdGEpOworCWlmIChkZXYp CisJCWdfcHRyX2FycmF5X2FkZChpZ3RfZGV2cy52aWV3LCBkZXYpOworCisJREJHKCJGaWx0ZXIg c3lzIHZpZXcgc2l6ZTogJWRcbiIsIGlndF9kZXZzLnZpZXctPmxlbik7CisKKwlyZXR1cm4gaWd0 X2RldnMudmlldzsKK30KKworLyogRmluZCBkcm0gZGV2aWNlIHVzaW5nIGRpcmVjdCBwYXRoIHRv IC9kZXYvZHJpLy4KKyAqIEl0IGV4dGVuZHMgZmlsdGVyX3N5cyB0byBhbGxvdyB1c2luZyBkcm06 L2Rldi9kcmkvY2FyZFggYW5kCisgKiBkcm06L2Rldi9kcmkvcmVuZGVyRFggZmlsdGVyIHN5bnRh eC4KKyAqLworc3RhdGljIEdQdHJBcnJheSAqZmlsdGVyX2RybShzdHJ1Y3QgZmlsdGVyX3NwZWMg KmZzcGVjLAorCQkJICAgICBzdHJ1Y3QgZmlsdGVyX2RlZmluaXRpb24gKmZkZWYpCit7CisJKHZv aWQpIGZkZWY7CisKKwlEQkcoImZpbHRlciBkcm1cbiIpOworCWlmICghc3RybGVuKGZzcGVjLT5k YXRhKSkKKwkJcmV0dXJuIGlndF9kZXZzLnZpZXc7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IGln dF9kZXZzLmRldnMtPmxlbjsgaSsrKSB7CisJCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXYgPSBnX3B0 cl9hcnJheV9pbmRleChpZ3RfZGV2cy5kZXZzLCBpKTsKKworCQlpZiAoIWlzX2RybV9zdWJzeXN0 ZW0oZGV2KSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzdHJlcXVhbChkZXYtPnN5c3BhdGgsIGZz cGVjLT5kYXRhKSB8fAorCQkJc3RyZXF1YWwoZGV2LT5kcm1fY2FyZCwgZnNwZWMtPmRhdGEpIHx8 CisJCQlzdHJlcXVhbChkZXYtPmRybV9yZW5kZXIsIGZzcGVjLT5kYXRhKSkgeworCQkJZ19wdHJf YXJyYXlfYWRkKGlndF9kZXZzLnZpZXcsIGRldik7CisJCQlicmVhazsKKwkJfQorCX0KKworCURC RygiRmlsdGVyIGRybSB2aWV3IHNpemU6ICVkXG4iLCBpZ3RfZGV2cy52aWV3LT5sZW4pOworCisJ cmV0dXJuIGlndF9kZXZzLnZpZXc7Cit9CisKKy8qIEZpbmQgYXBwcm9wcmlhdGUgcGNpIGRldmlj ZSBtYXRjaGluZyB2ZW5kb3IvZGV2aWNlL2NhcmQgZmlsdGVyIGFyZ3VtZW50cy4KKyAqLworc3Rh dGljIEdQdHJBcnJheSAqZmlsdGVyX3BjaShzdHJ1Y3QgZmlsdGVyX3NwZWMgKmZzcGVjLAorCQkJ ICAgICBzdHJ1Y3QgZmlsdGVyX2RlZmluaXRpb24gKmZkZWYpCit7CisJR0hhc2hUYWJsZSAqaHQ7 CisJc3RydWN0IGZpbHRlcl9kYXRhIGZkYXRhOworCWludCBjYXJkID0gLTE7CisJKHZvaWQpIGZk ZWY7CisKKwlEQkcoImZpbHRlciBwY2lcbiIpOworCisJaHQgPSBzcGxpdF9maWx0ZXJfZGF0YShm c3BlYy0+ZGF0YSk7CisJZmRhdGEudmVuZG9yID0gZ19oYXNoX3RhYmxlX2xvb2t1cChodCwgInZl bmRvciIpOworCWZkYXRhLmRldmljZSA9IGdfaGFzaF90YWJsZV9sb29rdXAoaHQsICJkZXZpY2Ui KTsKKwlmZGF0YS5jYXJkID0gZ19oYXNoX3RhYmxlX2xvb2t1cChodCwgImNhcmQiKTsKKworCWlm IChmZGF0YS5jYXJkKSB7CisJCXNzY2FuZihmZGF0YS5jYXJkLCAiJWQiLCAmY2FyZCk7CisJCWlm IChjYXJkIDwgMCkgeworCQkJZ19oYXNoX3RhYmxlX2Rlc3Ryb3koaHQpOworCQkJcmV0dXJuIGln dF9kZXZzLnZpZXc7CisJCX0KKwl9IGVsc2UgeworCQljYXJkID0gMDsKKwl9CisKKwlmb3IgKGlu dCBpID0gMDsgaSA8IGlndF9kZXZzLmRldnMtPmxlbjsgaSsrKSB7CisJCXN0cnVjdCBpZ3RfZGV2 aWNlICpkZXYgPSBnX3B0cl9hcnJheV9pbmRleChpZ3RfZGV2cy5kZXZzLCBpKTsKKworCQlpZiAo IWlzX3BjaV9zdWJzeXN0ZW0oZGV2KSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFNraXAgaWYgJ3Zl bmRvcicgZG9lc24ndCBtYXRjaCAoaGV4IG9yIG5hbWUpICovCisJCWlmIChmZGF0YS52ZW5kb3Ig JiYgIWlzX3ZlbmRvcl9tYXRjaGVkKGRldiwgZmRhdGEudmVuZG9yKSkKKwkJCWNvbnRpbnVlOwor CisJCS8qIFNraXAgaWYgJ2RldmljZScgZG9lc24ndCBtYXRjaCAqLworCQlpZiAoZmRhdGEuZGV2 aWNlICYmIHN0cmNhc2VjbXAoZmRhdGEuZGV2aWNlLCBkZXYtPmRldmljZSkpCisJCQljb250aW51 ZTsKKworCQkvKiBXZSBnZXQgbi10aCBjYXJkICovCisJCWlmICghY2FyZCkgeworCQkJZ19wdHJf YXJyYXlfYWRkKGlndF9kZXZzLnZpZXcsIGRldik7CisJCQlicmVhazsKKwkJfQorCQljYXJkLS07 CisJfQorCisJREJHKCJGaWx0ZXIgcGNpIHZpZXcgc2l6ZTogJWRcbiIsIGlndF9kZXZzLnZpZXct Pmxlbik7CisKKwlnX2hhc2hfdGFibGVfZGVzdHJveShodCk7CisKKwlyZXR1cm4gaWd0X2RldnMu dmlldzsKK30KKworLyogSGVscGVyIGZvciBmaW5kaW5nIGZpcnN0IGRldmljZSBtYXRjaGluZyBw cm9wZXJ0eTp2YWx1ZS4KKyAqLworc3RhdGljIEdQdHJBcnJheSAqZmlsdGVyX3Byb3BlcnR5KHN0 cnVjdCBmaWx0ZXJfc3BlYyAqZnNwZWMsCisJCQkJICBzdHJ1Y3QgZmlsdGVyX2RlZmluaXRpb24g KmZkZWYpCit7CisJR0hhc2hUYWJsZSAqaHQ7CisJc3RydWN0IGZpbHRlcl9kYXRhIGZkYXRhOwor CWludCBjYXJkID0gLTE7CisJY29uc3QgY2hhciAqcHJvcGVydHkgPSBmZGVmLT5wcm9wZXJ0eTsK Kwljb25zdCBjaGFyICp2YWx1ZSA9IGZkZWYtPnZhbHVlOworCisJaWYgKCFwcm9wZXJ0eSB8fCAh dmFsdWUpCisJCXJldHVybiBpZ3RfZGV2cy52aWV3OworCisJREJHKCJmaWx0ZXIgcHJvcGVydHkv dmFsdWUgWyVzLyVzXVxuIiwgcHJvcGVydHksIHZhbHVlKTsKKworCWh0ID0gc3BsaXRfZmlsdGVy X2RhdGEoZnNwZWMtPmRhdGEpOworCWZkYXRhLmNhcmQgPSBnX2hhc2hfdGFibGVfbG9va3VwKGh0 LCAiY2FyZCIpOworCisJaWYgKGZkYXRhLmNhcmQpIHsKKwkJc3NjYW5mKGZkYXRhLmNhcmQsICIl ZCIsICZjYXJkKTsKKwkJaWYgKGNhcmQgPCAwKSB7CisJCQlnX2hhc2hfdGFibGVfZGVzdHJveSho dCk7CisJCQlyZXR1cm4gaWd0X2RldnMudmlldzsKKwkJfQorCX0gZWxzZSB7CisJCWNhcmQgPSAw OworCX0KKworCWZvciAoaW50IGkgPSAwOyBpIDwgaWd0X2RldnMuZGV2cy0+bGVuOyBpKyspIHsK KwkJY29uc3QgY2hhciAqcHJvcF92YWx1ZTsKKwkJc3RydWN0IGlndF9kZXZpY2UgKmRldiA9IGdf cHRyX2FycmF5X2luZGV4KGlndF9kZXZzLmRldnMsIGkpOworCisJCXByb3BfdmFsdWUgPSBnZXRf cHJvcChkZXYsIHByb3BlcnR5KTsKKwkJaWYgKHByb3BfdmFsdWUgJiYgIXN0cmNtcChwcm9wX3Zh bHVlLCB2YWx1ZSkpIHsKKwkJCWlmICghY2FyZCkgeworCQkJCWdfcHRyX2FycmF5X2FkZChpZ3Rf ZGV2cy52aWV3LCBkZXYpOworCQkJCWJyZWFrOworCQkJfQorCQkJY2FyZC0tOworCQl9CisJfQor CisJREJHKCJGaWx0ZXIgdmlldyBzaXplOiAlZFxuIiwgaWd0X2RldnMudmlldy0+bGVuKTsKKwor CWdfaGFzaF90YWJsZV9kZXN0cm95KGh0KTsKKworCXJldHVybiBpZ3RfZGV2cy52aWV3OworfQor CitzdGF0aWMgR1B0ckFycmF5ICpmaWx0ZXJfdmdlbShzdHJ1Y3QgZmlsdGVyX3NwZWMgKmZzcGVj LAorCQkJICAgICAgc3RydWN0IGZpbHRlcl9kZWZpbml0aW9uICpmZGVmKQoreworCUdQdHJBcnJh eSAqdmlldyA9IGZpbHRlcl9wcm9wZXJ0eShmc3BlYywgZmRlZik7CisKKwlpZiAodmlldykgewor CQlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2ID0gZ19wdHJfYXJyYXlfaW5kZXgodmlldywgMCk7CisK KwkJZGV2LT52cyA9ICZ2X3ZnZW07CisJfQorCXJldHVybiB2aWV3OworfQorCitzdGF0aWMgR1B0 ckFycmF5ICpmaWx0ZXJfdmttcyhzdHJ1Y3QgZmlsdGVyX3NwZWMgKmZzcGVjLAorCQkJICAgICAg c3RydWN0IGZpbHRlcl9kZWZpbml0aW9uICpmZGVmKQoreworCXJldHVybiBmaWx0ZXJfcHJvcGVy dHkoZnNwZWMsIGZkZWYpOworfQorCitzdGF0aWMgR1B0ckFycmF5ICpmaWx0ZXJfdmM0KHN0cnVj dCBmaWx0ZXJfc3BlYyAqZnNwZWMsCisJCQkgICAgIHN0cnVjdCBmaWx0ZXJfZGVmaW5pdGlvbiAq ZmRlZikKK3sKKwlHUHRyQXJyYXkgKnZpZXcgPSBmaWx0ZXJfcHJvcGVydHkoZnNwZWMsIGZkZWYp OworCisJaWYgKHZpZXcpIHsKKwkJc3RydWN0IGlndF9kZXZpY2UgKmRldiA9IGdfcHRyX2FycmF5 X2luZGV4KHZpZXcsIDApOworCisJCWRldi0+dnMgPSAmdl92YzQ7CisJfQorCXJldHVybiBmaWx0 ZXJfcHJvcGVydHkoZnNwZWMsIGZkZWYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbHRl cl9kZWZpbml0aW9uIGZfZHJtID0geworCS5maWx0ZXJfZnVuY3Rpb24gPSBmaWx0ZXJfZHJtLAor CS5oZWxwID0gImRybTovZGV2L2RyaS8qIHBhdGgiLAorCS5kZXRhaWwgPSAiZmluZCBkcm0gZGV2 aWNlIGJ5IC9kZXYvZHJpLyogbm9kZVxuIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmls dGVyX2RlZmluaXRpb24gZl9wY2kgPSB7CisJLmZpbHRlcl9mdW5jdGlvbiA9IGZpbHRlcl9wY2ks CisJLmhlbHAgPSAicGNpOlt2ZW5kb3I9JTA0eC9uYW1lXVssZGV2aWNlPSUwNHhdWyxjYXJkPSVk XSIsCisJLmRldGFpbCA9ICJ2ZW5kb3IgaXMgaGV4IG51bWJlciBvciB2ZW5kb3IgbmFtZVxuIiwK K307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsdGVyX2RlZmluaXRpb24gZl92Z2VtID0gewor CS5maWx0ZXJfZnVuY3Rpb24gPSBmaWx0ZXJfdmdlbSwKKwkuaGVscCA9ICJ2Z2VtOltjYXJkPSVk XSIsCisJLmRldGFpbCA9ICJjYXJkIGlzIG4tdGggdmdlbSBjYXJkIG51bWJlclxuIiwKKwkucHJv cGVydHkgPSAiTU9EQUxJQVMiLAorCS52YWx1ZSA9ICJwbGF0Zm9ybTp2Z2VtIiwKK307CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZmlsdGVyX2RlZmluaXRpb24gZl92a21zID0geworCS5maWx0ZXJf ZnVuY3Rpb24gPSBmaWx0ZXJfdmttcywKKwkuaGVscCA9ICJ2a21zOltjYXJkPSVkXSIsCisJLmRl dGFpbCA9ICJjYXJkIGlzIG4tdGggdmttcyBjYXJkIG51bWJlclxuIiwKKwkucHJvcGVydHkgPSAi TU9EQUxJQVMiLAorCS52YWx1ZSA9ICJwbGF0Zm9ybTp2a21zIiwKK307CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZmlsdGVyX2RlZmluaXRpb24gZl92YzQgPSB7CisJLmZpbHRlcl9mdW5jdGlvbiA9 IGZpbHRlcl92YzQsCisJLmhlbHAgPSAidmM0OltjYXJkPSVkXSIsCisJLmRldGFpbCA9ICJjYXJk IGlzIG4tdGggdmM0IGNhcmQgbnVtYmVyXG4iLAorCS5wcm9wZXJ0eSA9ICJPRl9DT01QQVRJQkxF XzAiLAorCS52YWx1ZSA9ICJicmNtLGJjbTI4MzUtdmM0IiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qg bmFtZV92YWx1ZSBmaWx0ZXJfZGVmaW5pdGlvbl9saXN0W10gPSB7CisJeyAiZHJtIiwgICAgIChn cG9pbnRlcikgJmZfZHJtIH0sCisJeyAicGNpIiwgICAgIChncG9pbnRlcikgJmZfcGNpIH0sCisJ eyAidmdlbSIsICAgIChncG9pbnRlcikgJmZfdmdlbSB9LAorCXsgInZrbXMiLCAgICAoZ3BvaW50 ZXIpICZmX3ZrbXMgfSwKKwl7ICJ2YzQiLCAgICAgKGdwb2ludGVyKSAmZl92YzQgfSwKKwl7IE5V TEwsIH0sCit9OworCisvKioKKyAqIEBpZ3RfZGV2aWNlX3ByaW50X2ZpbHRlcl90eXBlcworICoK KyAqIFByaW50IGFsbCBmaWx0ZXJzIHN5bnRheCBmb3IgZGV2aWNlIHNlbGVjdGlvbi4KKyAqLwor dm9pZCBpZ3RfZGV2aWNlX3ByaW50X2ZpbHRlcl90eXBlcyh2b2lkKQoreworCXN0cnVjdCBuYW1l X3ZhbHVlICpsaXN0ID0gJmZpbHRlcl9kZWZpbml0aW9uX2xpc3RbMF07CisKKwlwcmludGYoIkZp bHRlciB0eXBlczpcbi0tLVxuIik7CisJcHJpbnRmKCIlLTEycyAgJXNcbi0tLVxuIiwgImZpbHRl ciIsICJzeW50YXgiKTsKKworCXByaW50ZigiJS0xMnMgICVzXG4iLCAiIiwgImRpcmVjdCBzdWJz eXN0ZW06L3N5cy8uLi4gcGF0aCBzZWxlY3Rpb25cbiIpOworCXByaW50ZigiJS0xMnMgICVzXG4i LCAiIiwKKwkgICAgICAgImV4OiBkcm06L3N5cy9kZXZpY2VzL3BjaTAwMDA6MDAvMDAwMDowMDow Mi4wL2RybS9jYXJkMCIpOworCXByaW50ZigiJS0xMnMgICVzXG4iLCAiIiwKKwkgICAgICAgIiAg ICBwY2k6L3N5cy9kZXZpY2VzL3BjaTAwMDA6MDAvMDAwMDowMDowMi4wIik7CisJcHJpbnRmKCIl LTEycyAgJXNcbiIsICIiLAorCSAgICAgICAiICAgIHBsYXRmb3JtOi9zeXMvZGV2aWNlcy9wbGF0 Zm9ybS92Z2VtXG4iKTsKKworCXdoaWxlIChsaXN0LT5uYW1lKSB7CisJCXN0cnVjdCBmaWx0ZXJf ZGVmaW5pdGlvbiAqdiA9CisJCQkJKHN0cnVjdCBmaWx0ZXJfZGVmaW5pdGlvbiAqKSBsaXN0LT52 YWx1ZTsKKworCQlwcmludGYoIiUtMTJzICAlc1xuIiwgbGlzdC0+bmFtZSwgdi0+aGVscCk7CisJ CXByaW50ZigiJS0xMnMgICVzXG4iLCAiIiwgdi0+ZGV0YWlsKTsKKwkJbGlzdCsrOworCX0KK30K Kworc3RhdGljIEdQdHJBcnJheSAqZGV2aWNlX2ZpbHRlcnMgPSBOVUxMOworCisjZGVmaW5lIERF VklDRV9GSUxURVJfQ0hFQ0tfQUxMT0MoKSBcCisJZG8geyBcCisJCWlmICghZGV2aWNlX2ZpbHRl cnMpIFwKKwkJCWRldmljZV9maWx0ZXJzID0gZ19wdHJfYXJyYXlfbmV3X2Z1bGwoMiwgZnJlZSk7 IFwKKwkJaWd0X2Fzc2VydChkZXZpY2VfZmlsdGVycyk7IFwKKwl9IHdoaWxlICgwKQorCisvKioK KyAqIGlndF9kZXZpY2VfZmlsdGVyX2NvdW50CisgKgorICogUmV0dXJucyBudW1iZXIgb2YgZmls dGVycyBjb2xsZWN0ZWQgaW4gdGhlIGZpbHRlciBhcnJheS4KKyAqLworaW50IGlndF9kZXZpY2Vf ZmlsdGVyX2NvdW50KHZvaWQpCit7CisJREVWSUNFX0ZJTFRFUl9DSEVDS19BTExPQygpOworCisJ cmV0dXJuIGRldmljZV9maWx0ZXJzLT5sZW47Cit9CisKK3N0YXRpYyBib29sIGlzX3N5c19wYXRo X2ZpbHRlcihjb25zdCBjaGFyICpzdHIpCit7CisJaWYgKHN0ciAmJiAhc3RybmNtcChzdHIsICIv c3lzIiwgNCkpCisJCXJldHVybiB0cnVlOworCXJldHVybiBmYWxzZTsKK30KKworLyogQ2hlY2sg ZG9lcyBmaWx0ZXIgaXMgdmFsaWQuIEl0IGNoZWNrczoKKyAqIDEuIC9zeXMvLi4uIHBhdGggZmly c3QKKyAqIDIuIGZpbHRlciBuYW1lIGZyb20gZmlsdGVyIGRlZmluaXRpb24KKyAqLworc3RhdGlj IGJvb2wgaXNfZmlsdGVyX3ZhbGlkKGNvbnN0IGNoYXIgKmZpbHRlcikKK3sKKwlzdHJ1Y3QgZmls dGVyX3NwZWMgZnNwZWM7CisJc3RydWN0IGZpbHRlcl9mdW5jICpmZnVuYzsKKwlpbnQgcmV0Owor CisJcG9wdWxhdGVfZ3B1X2RhdGEoKTsKKworCXJldCA9IGdldF9maWx0ZXJfc3BlYyhmaWx0ZXIs ICZmc3BlYyk7CisJaWYgKCFyZXQpCisJCXJldHVybiBmYWxzZTsKKworCS8qIENoZWNrIGlmIC9z eXMgcGF0aCBpcyB2YWxpZCAqLworCWlmIChpc19zeXNfcGF0aF9maWx0ZXIoZnNwZWMuZGF0YSkp IHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCWlmIChzdGF0KGZzcGVjLmRhdGEsICZzdCkpIHsKKwkJ CWlndF93YXJuKCJpc19maWx0ZXJfdmFsaWQ6IHN5c3BhdGggWyVzXSwgZXJyOiAlc1xuIiwKKwkJ CQkgZnNwZWMuZGF0YSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfSBl bHNlIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJZmZ1bmMgPSBnX2hhc2hfdGFibGVf bG9va3VwKGZpbHRlcl9kZWZpbml0aW9uX2h0LCBmc3BlYy5uYW1lKTsKKwlpZiAoIWZmdW5jKSB7 CisJCWlndF93YXJuKCJObyBmaWx0ZXIgd2l0aCBuYW1lIFslc11cbiIsIGZzcGVjLm5hbWUpOwor CQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogaWd0X2Rl dmljZV9maWx0ZXJfYWRkCisgKiBAZmlsdGVyOiBmaWx0ZXIgdG8gYmUgc3RvcmVkIGluIGZpbHRl ciBhcnJheQorICoKKyAqIEZ1bmN0aW9uIGFsbG93cyBwYXNzaW5nIHNpbmdsZSBvciBtb3JlIGZp bHRlcnMgd2l0aGluIG9uZSBzdHJpbmcuIFRoaXMgaXMKKyAqIGZvciBDSSB3aGVuIGl0IGNhbiBl eHRyYWN0IGZpbHRlciBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlIChhbmQgaXQgbXVzdAorICog YmUgc2luZ2xlIHN0cmluZykuIFNvIGlmIEBmaWx0ZXIgY29udGFpbnMgc2VtaWNvbG9uICc7JyBp dCB0cmVhdHMKKyAqIGVhY2ggcGFydCBhcyBzZXBhcmF0ZSBmaWx0ZXIgYW5kIGFkZHMgdG8gdGhl IGZpbHRlciBhcnJheS4KKyAqCisgKiBSZXR1cm5zIG51bWJlciBvZiBmaWx0ZXJzIGFkZGVkIHRv IGZpbHRlciBhcnJheS4gQ2FuIGJlIGdyZWF0ZXIgdGhhbgorICogMSBpZiBAZmlsdGVyIGNvbnRh aW5zIG1vcmUgdGhhbiBvbmUgZmlsdGVyIHNlcGFyYXRlZCBieSBzZW1pY29sb24uCisgKi8KK2lu dCBpZ3RfZGV2aWNlX2ZpbHRlcl9hZGQoY29uc3QgY2hhciAqZmlsdGVyKQoreworCWdjaGFyICoq c3RydiwgKipzOworCWludCBjID0gMDsKKworCURFVklDRV9GSUxURVJfQ0hFQ0tfQUxMT0MoKTsK Kwlwb3B1bGF0ZV9ncHVfZGF0YSgpOworCisJc3RydiA9IGdfc3Ryc3BsaXQoZmlsdGVyLCAiOyIs IC0xKTsKKworCXMgPSBzdHJ2OworCXdoaWxlICgqcykgeworCQlib29sIGlzX3ZhbGlkID0gaXNf ZmlsdGVyX3ZhbGlkKCpzKTsKKwkJaWd0X3dhcm5fb24oIWlzX3ZhbGlkKTsKKwkJaWYgKGlzX3Zh bGlkKQorCQkJZ19wdHJfYXJyYXlfYWRkKGRldmljZV9maWx0ZXJzLCBzdHJkdXAoKnMpKTsKKwkJ cysrOworCX0KKwlnX3N0cmZyZWV2KHN0cnYpOworCisJcmV0dXJuIGM7Cit9CisKKy8qKgorICog aWd0X2RldmljZV9maWx0ZXJfZnJlZV9hbGwKKyAqCisgKiBGcmVlIGFsbCBmaWx0ZXJzIHdpdGhp biBhcnJheS4KKyAqLwordm9pZCBpZ3RfZGV2aWNlX2ZpbHRlcl9mcmVlX2FsbCh2b2lkKQorewor CWlmICghZGV2aWNlX2ZpbHRlcnMpCisJCXJldHVybjsKKworCWdfcHRyX2FycmF5X3NldF9mcmVl X2Z1bmMoZGV2aWNlX2ZpbHRlcnMsIGZyZWUpOworCWdfcHRyX2FycmF5X3VucmVmKGRldmljZV9m aWx0ZXJzKTsKKwlkZXZpY2VfZmlsdGVycyA9IE5VTEw7Cit9CisKKy8qKgorICogaWd0X2Rldmlj ZV9maWx0ZXJfZ2V0CisgKiBAbnVtOiBOdW1iZXIgb2YgZmlsdGVyIGZyb20gZmlsdGVyIGFycmF5 CisgKgorICogUmV0dXJucyBmaWx0ZXIgc3RyaW5nIG9yIE5VTEwgaWYgQG51bSBpcyBvdXQgb2Yg cmFuZ2Ugb2YgZmlsdGVyIGFycmF5LgorICovCitjb25zdCBjaGFyICppZ3RfZGV2aWNlX2ZpbHRl cl9nZXQoaW50IG51bSkKK3sKKwlERVZJQ0VfRklMVEVSX0NIRUNLX0FMTE9DKCk7CisKKwlpZiAo bnVtIDwgMCB8fCBudW0gPj0gZGV2aWNlX2ZpbHRlcnMtPmxlbikKKwkJcmV0dXJuIE5VTEw7CisK KwlyZXR1cm4gZ19wdHJfYXJyYXlfaW5kZXgoZGV2aWNlX2ZpbHRlcnMsIG51bSk7Cit9CisKK3N0 YXRpYyBib29sIGlndF9kZXZpY2VfZmlsdGVyX2FwcGx5KGNvbnN0IGNoYXIgKmZpbHRlcikKK3sK KwlzdHJ1Y3QgZmlsdGVyX3NwZWMgZnNwZWM7CisJYm9vbCByZXQ7CisKKwlpZiAoIWZpbHRlcikK KwkJcmV0dXJuIGZhbHNlOworCisJcmV0ID0gZ2V0X2ZpbHRlcl9zcGVjKGZpbHRlciwgJmZzcGVj KTsKKwlpZiAoIXJldCkgeworCQlpZ3Rfd2FybigiQ2FuJ3Qgc3BsaXQgZmlsdGVyIFslc11cbiIs IGZpbHRlcik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBDbGVhbiB2aWV3ICovCisJZ19w dHJfYXJyYXlfcmVtb3ZlX3JhbmdlKGlndF9kZXZzLnZpZXcsIDAsIGlndF9kZXZzLnZpZXctPmxl bik7CisKKwkvKiBJZiBmc3BlYy5kYXRhIGNvbnRhaW5zICIvc3lzIiB1c2UgZGlyZWN0IHBhdGgg aW5zdGVhZAorCSAqIGNvbnRleHR1YWwgZmlsdGVyLgorCSAqLworCWlmIChpc19zeXNfcGF0aF9m aWx0ZXIoZnNwZWMuZGF0YSkpCisJCWZpbHRlcl9zeXMoJmZzcGVjLCBOVUxMKTsKKwllbHNlIHsK KwkJc3RydWN0IGZpbHRlcl9kZWZpbml0aW9uICpmZGVmOworCisJCWZkZWYgPSBnX2hhc2hfdGFi bGVfbG9va3VwKGZpbHRlcl9kZWZpbml0aW9uX2h0LCBmc3BlYy5uYW1lKTsKKwkJaWYgKCFmZGVm KSB7CisJCQlpZ3Rfd2FybigiTm8gZmlsdGVyIHdpdGggbmFtZSBbJXNdXG4iLCBmc3BlYy5uYW1l KTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQlmZGVmLT5maWx0ZXJfZnVuY3Rpb24oJmZzcGVj LCBmZGVmKTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworI2RlZmluZSBzYWZlX3N0cm5jcHko ZHN0LCBzcmMsIHNpemUpIGRvIHsgXAorCWlmICgoZHN0KSAmJiAoc3JjKSkgXAorCQlzdHJuY3B5 KChkc3QpLCAoc3JjKSwgKHNpemUpKTsgXAorCX0gd2hpbGUgKDApCisKKy8qKgorICogaWd0X2Rl dmljZV9jYXJkX21hdGNoCisgKiBAZmlsdGVyOiBmaWx0ZXIgc3RyaW5nCisgKiBAY2FyZDogcG9p bnRlciB0byBpZ3RfZGV2aWNlX2NhcmQgc3RydWN0CisgKgorICogRnVuY3Rpb24gYXBwbGllcyBm aWx0ZXIgdG8gbWF0Y2ggZGV2aWNlIGZyb20gZGV2aWNlIGFycmF5LgorICoKKyAqIFJldHVybnM6 CisgKiBmYWxzZSAtIG5vIGNhcmQgcG9pbnRlciB3YXMgcGFzc2VkIG9yIGNhcmQgd2Fzbid0IG1h dGNoZWQsCisgKiB0cnVlIC0gY2FyZCBtYXRjaGVkIGFuZCByZXR1cm5lZC4KKyAqLworYm9vbCBp Z3RfZGV2aWNlX2NhcmRfbWF0Y2goY29uc3QgY2hhciAqZmlsdGVyLCBzdHJ1Y3QgaWd0X2Rldmlj ZV9jYXJkICpjYXJkKQoreworCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXYgPSBOVUxMOworCisJaWYg KCFjYXJkKQorCQlyZXR1cm4gZmFsc2U7CisJbWVtc2V0KGNhcmQsIDAsIHNpemVvZigqY2FyZCkp OworCisJaWd0X2RldmljZXNfc2NhbihmYWxzZSk7CisKKwlpZiAoaWd0X2RldmljZV9maWx0ZXJf YXBwbHkoZmlsdGVyKSA9PSBmYWxzZSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCFpZ3RfZGV2 cy52aWV3LT5sZW4pCisJCXJldHVybiBmYWxzZTsKKworCS8qIFdlIHRha2UgZmlyc3Qgb25lIGlm IG1vcmUgdGhhbiBvbmUgY2FyZCBtYXRjaGVzIGZpbHRlciAqLworCWRldiA9IGdfcHRyX2FycmF5 X2luZGV4KGlndF9kZXZzLnZpZXcsIDApOworCWNhcmQtPmNoaXBzZXQgPSBEUklWRVJfQU5ZOwor CWlmIChkZXYtPnZzKQorCQljYXJkLT5jaGlwc2V0ID0gZGV2LT52cy0+Y2hpcHNldDsKKworCXNh ZmVfc3RybmNweShjYXJkLT5zdWJzeXN0ZW0sIGRldi0+c3Vic3lzdGVtLAorCQkgICAgIHNpemVv ZihjYXJkLT5zdWJzeXN0ZW0pIC0gMSk7CisJc2FmZV9zdHJuY3B5KGNhcmQtPmNhcmQsIGRldi0+ ZHJtX2NhcmQsCisJCSAgICAgc2l6ZW9mKGNhcmQtPmNhcmQpIC0gMSk7CisJc2FmZV9zdHJuY3B5 KGNhcmQtPnJlbmRlciwgZGV2LT5kcm1fcmVuZGVyLAorCQkgICAgIHNpemVvZihjYXJkLT5yZW5k ZXIpIC0gMSk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL2xpYi9pZ3RfZGV2aWNl X3NjYW4uaCBiL2xpYi9pZ3RfZGV2aWNlX3NjYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMC4uYzY4ZDIzZjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvaWd0X2RldmljZV9z Y2FuLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENv cnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisg KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQor ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNo YWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg dGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgor ICoKKyAqLworCisjaWZuZGVmIF9fSUdUX0RFVklDRV9TQ0FOX0hfXworI2RlZmluZSBfX0lHVF9E RVZJQ0VfU0NBTl9IX18KKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPGlndC5oPgor CitlbnVtIGlndF9kZXZpY2VzX3ByaW50X3R5cGUgeworCUlHVF9QUklOVF9TSU1QTEUsCisJSUdU X1BSSU5UX0RFVEFJTCwKK307CisKK3N0cnVjdCBpZ3RfZGV2aWNlX2NhcmQgeworCWludCBjaGlw c2V0OworCWNoYXIgc3Vic3lzdGVtW05BTUVfTUFYXTsKKwljaGFyIGNhcmRbTkFNRV9NQVhdOwor CWNoYXIgcmVuZGVyW05BTUVfTUFYXTsKK307CisKKy8qIFNjYW4gdWRldiBzdWJzeXN0ZW1zLiBE byBpdCBvbmNlIHVubGVzcyBmb3JjZSBpcyB0cnVlLCB3aGF0IHJlc2NhbnMKKyAqIGRldmljZXMg YWdhaW4uCisgKi8KK3ZvaWQgaWd0X2RldmljZXNfc2Nhbihib29sIGZvcmNlKTsKKwordm9pZCBp Z3RfZGV2aWNlc19wcmludChlbnVtIGlndF9kZXZpY2VzX3ByaW50X3R5cGUgcHJpbnR0eXBlKTsK K3ZvaWQgaWd0X2RldmljZXNfcHJpbnRfdmVuZG9ycyh2b2lkKTsKK3ZvaWQgaWd0X2RldmljZV9w cmludF9maWx0ZXJfdHlwZXModm9pZCk7CisKKy8qCisgKiBIYW5kbGUgZGV2aWNlIGZpbHRlciBj b2xsZWN0aW9uIGFycmF5LgorICogSUdUIGNhbiBzdG9yZS9yZXRyaWV2ZSBmaWx0ZXJzIHBhc3Nl ZCBieSB1c2VyIHVzaW5nICctLWRldmljZScgYXJncy4KKyAqLworCisvKiBSZXR1cm4gbnVtYmVy IG9mIGZpbHRlcnMgY29sbGVjdGVkLiAqLworaW50IGlndF9kZXZpY2VfZmlsdGVyX2NvdW50KHZv aWQpOworCisvKiBBZGQgZmlsdGVyKHMpIHRvIHRoZSBhcnJheS4gUmV0dXJucyBudW1iZXIgb2Yg ZmlsdGVycyBhZGRlZCAoPjEgaWYKKyAqIHVzZXIgcGFzc2VzIG1vcmUgdGhhbiBvbmUgZmlsdGVy IHNlcGFyYXRlZCBieSAnOycpCisgKi8KK2ludCBpZ3RfZGV2aWNlX2ZpbHRlcl9hZGQoY29uc3Qg Y2hhciAqZmlsdGVyKTsKKworLyogRnJlZSBhbGwgZmlsdGVycy4gKi8KK3ZvaWQgaWd0X2Rldmlj ZV9maWx0ZXJfZnJlZV9hbGwodm9pZCk7CisKKy8qIEdldCBuLXRoIGZpbHRlciBzdG9yZWQgaW4g dGhlIGFycmF5IG9yIE5VTEwgKi8KK2NvbnN0IGNoYXIgKmlndF9kZXZpY2VfZmlsdGVyX2dldChp bnQgbnVtKTsKKworLyogVXNlIGZpbHRlciB0byBtYXRjaCB0aGUgZGV2aWNlIGFuZCBmaWxsIGNh cmQgc3RydWN0dXJlICovCitib29sIGlndF9kZXZpY2VfY2FyZF9tYXRjaChjb25zdCBjaGFyICpm aWx0ZXIsIHN0cnVjdCBpZ3RfZGV2aWNlX2NhcmQgKmNhcmQpOworCisjZW5kaWYgLyogX19JR1Rf REVWSUNFX1NDQU5fSF9fICovCmRpZmYgLS1naXQgYS9saWIvbWVzb24uYnVpbGQgYi9saWIvbWVz b24uYnVpbGQKaW5kZXggMjIxYWUyOGMuLjczOTVkMzg4IDEwMDY0NAotLS0gYS9saWIvbWVzb24u YnVpbGQKKysrIGIvbGliL21lc29uLmJ1aWxkCkBAIC0xMCw2ICsxMCw3IEBAIGxpYl9zb3VyY2Vz ID0gWwogCSdpZ3RfY29sb3JfZW5jb2RpbmcuYycsCiAJJ2lndF9kZWJ1Z2ZzLmMnLAogCSdpZ3Rf ZGV2aWNlLmMnLAorCSdpZ3RfZGV2aWNlX3NjYW4uYycsCiAJJ2lndF9hdXguYycsCiAJJ2lndF9n cHVfcG93ZXIuYycsCiAJJ2lndF9ndC5jJywKLS0gCjIuMjMuMAoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRl dkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pZ3QtZGV2