From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2017889BC2 for ; Thu, 24 Oct 2019 11:05:43 +0000 (UTC) From: Arkadiusz Hiler Date: Thu, 24 Oct 2019 14:05:13 +0300 Message-ID: <20191024110515.11741-3-arkadiusz.hiler@intel.com> In-Reply-To: <20191024110515.11741-1-arkadiusz.hiler@intel.com> References: <20191024110515.11741-1-arkadiusz.hiler@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 2/4] 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: Petri Latvala List-ID: RnJvbTogWmJpZ25pZXcgS2VtcGN6ecWEc2tpIDx6Ymlnbmlldy5rZW1wY3p5bnNraUBpbnRlbC5j b20+CgpDaGFuZ2UgYWRkcyBkZXZpY2Ugc2VsZWN0aW9uIEFQSSBiYXNlZCBvbiBzY2FubmluZyBk cm0gc3Vic3lzdGVtCnVzaW5nIHVkZXYgbGlicmFyeS4KCnYyIChBcmVrKToKICogZHJvcCBtb3N0 IG9mIHRoZSBnbGliIGNvZGUgaW4gZmF2b3Igb2YgaWd0X2xpc3QgYW5kIHBsYWluIEMKICogbWFr ZSBzeXNmcyBwYXRocyBoYW5kbGluZyBub24tc3BlY2lhbCAtIGludHJvZHVjZSBzeXM6IGZpbHRl cgogKiBkcm9wIG11bHRpcGxlIGZpbHRlcl8qIHN0cnVjdHMgaW4gZmF2b3Igb2YganVzdCB0d286 CiAgIC0gZmlsdGVyX2NsYXNzIGZvciBkZWZpbmluZyBmaWx0ZXJzIHR5cGVzIChlLmcuIHN5czop CiAgIC0gZmlsdGVyIGZvciAiZmlsdGVyIGluc3RhbmNlIiAtIHRoZSBkYXRhIHByb3ZpZGVkIGJ5 IHRoZSB1c2VyCiAqIHByb21vdGUgbWFueSBtYWNyb3MgdG8gcmVhbCBmdW5jdGlvbnMgZm9yIHR5 cGUgc2FmZXR5CiAqIHJlbmFtZSBkZXZzLT5kZXZzIHRvIGRldnMtPmFsbAogKiByZW5hbWUgZGV2 cy0+dmlldyB0byBkZXZzLT5maWx0ZXJlZAogKiBkb24ndCBleHBvc2UgImNoaXAiIChlLmcuIERS SVZFUl9BTlkpIGFzIGl0J3MgdW5yZWFkYWJsZSBhcyBpbnQKICogdXBkYXRlIGRvY3MgdG8gcmVm bGVjdCB0aG9zZSBjaGFuZ2VzCiAqIG1vdmUgb3BlbiBmdW5jdGlvbnMgdGhhdCBvcGVuIGlndF9k ZXZpY2VfY2FyZCB0byB0aGlzIHBhdGNoCiAqIHJlbW92ZSBwbGF0Zm9ybSBmaWx0ZXIgY2xhc3Mg Zm9yIG5vdwogKiB1c2Ugb25seSBhIHNpbmdsZSBmaWx0ZXIKCkNjOiBQZXRyaSBMYXR2YWxhIDxw ZXRyaS5sYXR2YWxhQGludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogWmJpZ25pZXcgS2VtcGN6ecWE c2tpIDx6Ymlnbmlldy5rZW1wY3p5bnNraUBpbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IEFya2Fk aXVzeiBIaWxlciA8YXJrYWRpdXN6LmhpbGVyQGludGVsLmNvbT4KLS0tCiAuLi4vaWd0LWdwdS10 b29scy9pZ3QtZ3B1LXRvb2xzLWRvY3MueG1sICAgICAgfCAgICAxICsKIGxpYi9NYWtlZmlsZS5z b3VyY2VzICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogbGliL2lndF9kZXZpY2Vf c2Nhbi5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTE5OSArKysrKysrKysrKysrKysrKwog bGliL2lndF9kZXZpY2Vfc2Nhbi5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA2NyArCiBs aWIvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxICsKIDUg ZmlsZXMgY2hhbmdlZCwgMTI3MCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGli L2lndF9kZXZpY2Vfc2Nhbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2lndF9kZXZpY2Vfc2Nh bi5oCgpkaWZmIC0tZ2l0IGEvZG9jcy9yZWZlcmVuY2UvaWd0LWdwdS10b29scy9pZ3QtZ3B1LXRv b2xzLWRvY3MueG1sIGIvZG9jcy9yZWZlcmVuY2UvaWd0LWdwdS10b29scy9pZ3QtZ3B1LXRvb2xz LWRvY3MueG1sCmluZGV4IDNmMTRkN2JlLi5jNDFjYmI3OCAxMDA2NDQKLS0tIGEvZG9jcy9yZWZl cmVuY2UvaWd0LWdwdS10b29scy9pZ3QtZ3B1LXRvb2xzLWRvY3MueG1sCisrKyBiL2RvY3MvcmVm ZXJlbmNlL2lndC1ncHUtdG9vbHMvaWd0LWdwdS10b29scy1kb2NzLnhtbApAQCAtMjMsNiArMjMs NyBAQAogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9pZ3RfY29yZS54bWwiLz4KICAgICA8eGk6 aW5jbHVkZSBocmVmPSJ4bWwvaWd0X2RlYnVnZnMueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJl Zj0ieG1sL2lndF9kZXZpY2UueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF9k ZXZpY2Vfc2Nhbi54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvaWd0X2RyYXcueG1s Ii8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF9kdW1teWxvYWQueG1sIi8+CiAgICAg PHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF9mYi54bWwiLz4KZGlmZiAtLWdpdCBhL2xpYi9NYWtl ZmlsZS5zb3VyY2VzIGIvbGliL01ha2VmaWxlLnNvdXJjZXMKaW5kZXggMWI1OGI2ZDAuLjdlODU5 NGM1IDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUuc291cmNlcworKysgYi9saWIvTWFrZWZpbGUu c291cmNlcwpAQCAtMjUsNiArMjUsOCBAQCBsaWJfc291cmNlX2xpc3QgPQkgCVwKIAlpZ3RfZGVi dWdmcy5oCQlcCiAJaWd0X2RldmljZS5jCQlcCiAJaWd0X2RldmljZS5oCQlcCisJaWd0X2Rldmlj ZV9zY2FuLmMJXAorCWlndF9kZXZpY2Vfc2Nhbi5oCVwKIAlpZ3RfYXV4LmMJCVwKIAlpZ3RfYXV4 LmgJCVwKIAlpZ3RfY29sb3JfZW5jb2RpbmcuYwlcCmRpZmYgLS1naXQgYS9saWIvaWd0X2Rldmlj ZV9zY2FuLmMgYi9saWIvaWd0X2RldmljZV9zY2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAuLjcxZDMwNTg3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2lndF9kZXZpY2Vf c2Nhbi5jCkBAIC0wLDAgKzEsMTE5OSBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVs IENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0 d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiks CisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxs IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo ZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xs b3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg dGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgp IHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdI VCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJF LgorICoKKyAqLworCisjaW5jbHVkZSAiaWd0LmgiCisjaW5jbHVkZSAiaWd0X2xpc3QuaCIKKyNp bmNsdWRlICJpZ3Rfc3lzZnMuaCIKKyNpbmNsdWRlICJpZ3RfZGV2aWNlLmgiCisjaW5jbHVkZSAi aWd0X2RldmljZV9zY2FuLmgiCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGxpYnVkZXYu aD4KKyNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2lu Y2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGZjbnRs Lmg+CisKKy8qKgorICogU0VDVElPTjppZ3RfZGV2aWNlX3NjYW4KKyAqIEBzaG9ydF9kZXNjcmlw dGlvbjogRGV2aWNlIHNjYW5uaW5nIGFuZCBzZWxlY3Rpb24KKyAqIEB0aXRsZTogRGV2aWNlIHNl bGVjdGlvbgorICogQGluY2x1ZGU6IGlndC5oCisgKgorICogIyBEZXZpY2Ugc2Nhbm5pbmcKKyAq CisgKiBEZXZpY2Ugc2Nhbm5pbmcgaXRlcmF0ZXMgb3ZlciBEUk0gc3Vic3lzdGVtIHVzaW5nIHVk ZXYgbGlicmFyeQorICogdG8gYWNxdWlyZSBEUk0gZGV2aWNlcy4KKyAqIEZvciBlYWNoIERSTSBk ZXZpY2Ugd2UgYWxzbyBnZXQgYW5kIHN0b3JlIGl0cyBwYXJlbnQgdG8gYWxsb3cgZGV2aWNlCisg KiBzZWxlY3Rpb24gaGFwcGVuIGluIGEgbW9yZSBjb250ZXh0dWFsIHdheS4KKyAqCisgKiBQYXJl bnQgZGV2aWNlcyBhcmUgYnVzIGRldmljZXMgKGxpa2UgUENJLCBwbGF0Zm9ybSwgZXRjLikgYW5k IGNvbnRhaW4gYSBsb3QKKyAqIG9mIGV4dHJhIGRhdGEgb24gdG9wIG9mIHRoZSBEUk0gZGV2aWNl IGl0c2VsZi4KKyAqCisgKiAjIEZpbHRlcnMKKyAqCisgKiBEZXZpY2Ugc2VsZWN0aW9uIGNhbiBi ZSBkb25lIHVzaW5nIGZpbHRlcnMgdGhhdCBhcmUgdXNpbmcgdGhlIGRhdGEgY29sbGVjdGVkCisg KiB1ZGV2ICsgc29tZSBzeW50YWN0aWMgc3VnYXIuCisgKgorICogRGlyZWN0IGRldmljZSBzZWxl Y3Rpb24gZmlsdGVyIHVzZXMgc3lzZnMgcGF0aCB0byBmaW5kIHRoZSBkZXZpY2U6CisgKgorICog fFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIgLS0+CisgKiBzeXM6L3N5cy9wYXRoL3RvL2RldmljZS9v ci9wYXJlbnQKKyAqIF18CisgKgorICogRXhhbXBsZXM6CisgKiB8WzwhLS0gbGFuZ3VhZ2U9InBs YWluIiAtLT4KKyAqIC0gc3lzOi9zeXMvZGV2aWNlcy9wY2kwMDAwOjAwLzAwMDA6MDA6MDIuMC9k cm0vY2FyZDAKKyAqIC0gc3lzOi9zeXMvZGV2aWNlcy9wY2kwMDAwOjAwLzAwMDA6MDA6MDIuMAor ICogLSBzeXM6L3N5cy9kZXZpY2VzL3BsYXRmb3JtL3ZnZW0KKyAqIF18CisgKgorICogVGhlIGFs dGVybmF0aXZlIGlzIHRvIHVzZSBvdGhlciBpbXBsZW1lbnRlZCBmaWx0ZXJzOgorICoKKyAqIC0g ZHJtOiBnZXQgZHJtIC9kZXYvZHJpLy4uLiBkZXZpY2UgZGlyZWN0bHkKKyAqCisgKiAgIHxbPCEt LSBsYW5ndWFnZT0icGxhaW4iIC0tPgorICogICBkcm06L2Rldi9kcmkvLi4uCisgKiAgIF18Cisg KgorICogICBMb2FkaW5nIGRyaXZlcnMgaW4gZGlmZmVyZW50IG9yZGVyIGNhbiBjYXVzZSBkaWZm ZXJlbnQgb3JkZXJpbmcgb2YKKyAqICAgL2Rldi9kcmkvY2FyZCBub2RlcyB3aGljaCBiZSBwcm9i bGVtYXRpYyBmb3IgcmVsaWFibGUgYW5kIHJlcHJvZHVjaWJsZQorICogICBkZXZpY2Ugc2VsZWN0 aW9uLCBlLmcuIGluIGF1dG9tYXRlZCBleGVjdXRpb24gc2V0dGluZy4gSW4gc3VjaCBzY2VuYXJp b3MKKyAqICAgcGxlYXNlIGNvbnNpZGVyIHVzaW5nIHN5cywgcGNpIG9yIHBsYXRmb3JtIGZpbHRl cnMgaW5zdGVhZC4KKyAqCisgKiAtIHBjaTogc2VsZWN0IGRldmljZSB1c2luZyBQQ0kgdmVuZG9y IGFuZCBkZXZpY2UgcHJvcGVydGllcworICogICB8WzwhLS0gbGFuZ3VhZ2U9InBsYWluIiAtLT4K KyAqICAgcGNpOlt2ZW5kb3I9JTA0eC9uYW1lXVssZGV2aWNlPSUwNHhdWyxjYXJkPSVkXQorICog ICBdfAorICoKKyAqICAgRmlsdGVyIGFsbG93cyBkZXZpY2Ugc2VsZWN0aW9uIHVzaW5nIHZlbmRv ciAoaGV4IG9yIG5hbWUpLCBkZXZpY2UgaWQKKyAqICAgKGhleCkgYW5kIG50aC1jYXJkIGZyb20g YWxsIG1hdGNoZXMuIEZvciBleGFtcGxlIGlmIHRoZXJlIGFyZSA0IFBDSSBjYXJkcworICogICBp bnN0YWxsZWQgKGxldCB0d28gY2FyZHMgaGF2ZSAxMjM0IGFuZCBvdGhlciB0d28gMTIzNSBkZXZp Y2UgaWQsIGFsbCBvZgorICogICB0aGVtIG9mIHZlbmRvciBJbnRlbCkgeW91IGNhbiBzZWxlY3Qg b25lIHVzaW5nOgorICoKKyAqICAgfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIgLS0+CisgKiAgIHBj aTp2ZW5kb3I9SW50ZWwsZGV2aWNlPTEyMzQsY2FyZD0wCisgKiAgIF18CisgKgorICogICBvcgor ICoKKyAqICAgfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIgLS0+CisgKiAgIHBjaTp2ZW5kb3I9ODA4 NixkZXZpY2U9MTIzNCxjYXJkPTAKKyAqICAgXXwKKyAqCisgKiAgIFRoaXMgdGFrZXMgZmlyc3Qg ZGV2aWNlIHdpdGggMTIzNCBpZCBmb3IgSW50ZWwgdmVuZG9yICg4MDg2KS4KKyAqCisgKiAgIHxb PCEtLSBsYW5ndWFnZT0icGxhaW4iIC0tPgorICogICBwY2k6dmVuZG9yPUludGVsLGRldmljZT0x MjM0LGNhcmQ9MQorICogICBdfAorICoKKyAqICAgb3IKKyAqCisgKiAgIHxbPCEtLSBsYW5ndWFn ZT0icGxhaW4iIC0tPgorICogICBwY2k6dmVuZG9yPTgwODYsZGV2aWNlPTEyMzQsY2FyZD0xCisg KiAgIF18CisgKgorICogICBJdCBzZWxlY3RzIHRoZSBzZWNvbmQgb25lLgorICoKKyAqICAgQXMg b3JkZXIgdGhlIG9uIFBDSSBidXMgZG9lc24ndCBjaGFuZ2UgKHVubGVzcyB5b3UnbGwgYWRkIG5l dyBkZXZpY2Ugb3IKKyAqICAgcmVvcmRlciBleGlzdGluZyBvbmUpIGRldmljZSBzZWxlY3Rpb24g dXNpbmcgdGhpcyBmaWx0ZXIgd2lsbCBhbHdheXMKKyAqICAgcmV0dXJuIHlvdSBzYW1lIGRldmlj ZSByZWdhcmRsZXNzIHRoZSBvcmRlciBvZiBlbnVtZXJhdGlvbi4KKyAqCisgKiAgIFNpbXBsZSBz eW50YWN0aWMgc3VnYXIgb3ZlciB1c2luZyB0aGUgc3lzZnMgcGF0aHMuCisgKi8KKworI2lmZGVm IERFQlVHX0RFVklDRV9TQ0FOCisjZGVmaW5lIERCRyguLi4pIFwKK3sgXAorCXN0cnVjdCB0aW1l dmFsIHRtOyBcCisJZ2V0dGltZW9mZGF5KCZ0bSwgTlVMTCk7IFwKKwlwcmludGYoIiUxMGxkLiUw M2xkOiAiLCB0bS50dl9zZWMsIHRtLnR2X3VzZWMpOyBcCisJcHJpbnRmKF9fVkFfQVJHU19fKTsg XAorCX0KKworI2Vsc2UKKyNkZWZpbmUgREJHKC4uLikge30KKyNlbmRpZgorCitzdGF0aWMgaW5s aW5lIGJvb2wgc3RyZXF1YWwoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikKK3sKKwlpZiAo YSA9PSBOVUxMIHx8IGIgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHN0cmNt cChhLCBiKSA9PSAwOworfQorCitzdHJ1Y3QgaWd0X2RldmljZSB7CisJLyogRmlsbGVkIGZvciBk cm0gZGV2aWNlcyAqLworCXN0cnVjdCBpZ3RfZGV2aWNlICpwYXJlbnQ7CisKKwkvKiBQb2ludCB0 byB2ZW5kb3Igc3BlYyBpZiBjYW4gYmUgZm91bmQgKi8KKworCS8qIFByb3BlcnRpZXMgLyBzeXNh dHRycyByZXdyaXRlbiBmcm9tIHVkZXYgbGlzdHMgKi8KKwlHSGFzaFRhYmxlICpwcm9wc19odDsK KwlHSGFzaFRhYmxlICphdHRyc19odDsKKworCS8qIE1vc3QgdXNhYmxlIHZhcmlhYmxlcyBmcm9t IHVkZXYgZGV2aWNlICovCisJY2hhciAqc3Vic3lzdGVtOworCWNoYXIgKnN5c3BhdGg7CisJY2hh ciAqZGV2bm9kZTsKKworCS8qIC9kZXYvZHJpLy4uLiBwYXRocyAqLworCWNoYXIgKmRybV9jYXJk OworCWNoYXIgKmRybV9yZW5kZXI7CisKKwkvKiBGb3IgcGNpIHN1YnN5c3RlbSAqLworCWNoYXIg KnZlbmRvcjsKKwljaGFyICpkZXZpY2U7CisKKwlzdHJ1Y3QgaWd0X2xpc3QgbGluazsKK307CisK Ky8qIFNjYW5uZWQgZGV2aWNlcyAqLworc3RhdGljIHN0cnVjdCB7CisJc3RydWN0IGlndF9saXN0 IGFsbDsKKwlzdHJ1Y3QgaWd0X2xpc3QgZmlsdGVyZWQ7CisJYm9vbCBkZXZzX3NjYW5uZWQ7Cit9 IGlndF9kZXZzOworCitzdGF0aWMgc3RydWN0IHsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0 IGNoYXIgKnZlbmRvcl9pZDsKK30gcGNpX3ZlbmRvcl9tYXBwaW5nW10gPSB7CisJeyAiaW50ZWwi LCAiODA4NiIgfSwKKwl7ICJhbWQiLCAiMTAwMiIgfSwKKwl7IE5VTEwsIH0sCit9OworCitzdGF0 aWMgY29uc3QgY2hhciAqZ2V0X3BjaV92ZW5kb3JfaWRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1l KQoreworCWZvciAodHlwZW9mKCpwY2lfdmVuZG9yX21hcHBpbmcpICp2bSA9IHBjaV92ZW5kb3Jf bWFwcGluZzsgdm0tPm5hbWU7IHZtKyspCisJeworCQlpZiAoIXN0cmNhc2VjbXAobmFtZSwgdm0t Pm5hbWUpKQorCQkJcmV0dXJuIHZtLT52ZW5kb3JfaWQ7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9 CisKKy8qIFJlYWRpbmcgc3lzYXR0ciB2YWx1ZXMgY2FuIHRha2UgdGltZSAoZXZlbiBzZWNvbmRz KSwKKyAqIHdlIHdhbnQgdG8gYXZvaWQgcmVhZGluZyBzdWNoIGtleXMuCisgKi8KK3N0YXRpYyBi b29sIGlzX29uX2JsYWNrbGlzdChjb25zdCBjaGFyICp3aGF0KQoreworCXN0YXRpYyBjb25zdCBj aGFyICprZXlzW10gPSB7ICJjb25maWciLCAibW9kYWxpYXMiLCAibW9kZXMiLAorCQkJCSAgICAg ICJyZXNvdXJjZSIsCisJCQkJICAgICAgInJlc291cmNlMCIsICJyZXNvdXJjZTEiLCAicmVzb3Vy Y2UyIiwKKwkJCQkgICAgICAicmVzb3VyY2UzIiwgInJlc291cmNlNCIsICJyZXNvdXJjZTUiLAor CQkJCSAgICAgICJyZXNvdXJjZTBfd2MiLCAicmVzb3VyY2UxX3djIiwgInJlc291cmNlMl93YyIs CisJCQkJICAgICAgInJlc291cmNlM193YyIsICJyZXNvdXJjZTRfd2MiLCAicmVzb3VyY2U1X3dj IiwKKwkJCQkgICAgICAiZHJpdmVyIiwKKwkJCQkgICAgICAidWV2ZW50IiwgTlVMTH07CisJY29u c3QgY2hhciAqa2V5OworCWludCBpID0gMDsKKworCWlmICh3aGF0ID09IE5VTEwpCisJCXJldHVy biBmYWxzZTsKKworCXdoaWxlICgoa2V5ID0ga2V5c1tpKytdKSkgeworCQlpZiAoc3RyY21wKGtl eSwgd2hhdCkgPT0gMCkKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKKwor fQorCitzdGF0aWMgc3RydWN0IGlndF9kZXZpY2UgKmlndF9kZXZpY2VfbmV3KHZvaWQpCit7CisJ c3RydWN0IGlndF9kZXZpY2UgKmRldjsKKworCWRldiA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0 IGlndF9kZXZpY2UpKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIE5VTEw7CisKKwlkZXYtPmF0dHJz X2h0ID0gZ19oYXNoX3RhYmxlX25ld19mdWxsKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsLAorCQkJ CQkgICAgICBmcmVlLCBmcmVlKTsKKwlkZXYtPnByb3BzX2h0ID0gZ19oYXNoX3RhYmxlX25ld19m dWxsKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsLAorCQkJCQkgICAgICBmcmVlLCBmcmVlKTsKKwor CWlmIChkZXYtPmF0dHJzX2h0ICYmIGRldi0+cHJvcHNfaHQpCisJCXJldHVybiBkZXY7CisKKwly ZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgaWd0X2RldmljZV9hZGRfcHJvcChzdHJ1Y3Qg aWd0X2RldmljZSAqZGV2LAorCQkJCWNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUp Cit7CisJaWYgKCFrZXkgfHwgIXZhbHVlKQorCQlyZXR1cm47CisKKwlnX2hhc2hfdGFibGVfaW5z ZXJ0KGRldi0+cHJvcHNfaHQsIHN0cmR1cChrZXkpLCBzdHJkdXAodmFsdWUpKTsKK30KKworc3Rh dGljIHZvaWQgaWd0X2RldmljZV9hZGRfYXR0cihzdHJ1Y3QgaWd0X2RldmljZSAqZGV2LAorCQkJ CWNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJY29uc3QgY2hhciAqdiA9 IHZhbHVlOworCisJaWYgKCFrZXkpCisJCXJldHVybjsKKworCS8qIEl0J3MgcG9zc2libGUgd2Ug aGF2ZSBzeW1saW5rIGF0IGtleSBmaWxlbmFtZSwgYnV0IHVkZXYKKwkgKiBsaWJyYXJ5IHJlc29s dmVzIG9ubHkgZmV3IG9mIHRoZW0KKwkgKi8KKwlpZiAoIXYpIHsKKwkJc3RydWN0IHN0YXQgc3Q7 CisJCWNoYXIgcGF0aFtQQVRIX01BWF07CisJCWNoYXIgbGlua3RvW1BBVEhfTUFYXTsKKwkJaW50 IGxlbjsKKworCQlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIlcy8lcyIsIGRldi0+c3lz cGF0aCwga2V5KTsKKwkJaWYgKGxzdGF0KHBhdGgsICZzdCkgIT0gMCkKKwkJCXJldHVybjsKKwor CQlsZW4gPSByZWFkbGluayhwYXRoLCBsaW5rdG8sIHNpemVvZihsaW5rdG8pKTsKKwkJaWYgKGxl biA8PSAwIHx8IGxlbiA9PSAoc3NpemVfdCkgc2l6ZW9mKGxpbmt0bykpCisJCQlyZXR1cm47CisJ CWxpbmt0b1tsZW5dID0gJ1wwJzsKKwkJdiA9IHN0cnJjaHIobGlua3RvLCAnLycpOworCQlpZiAo diA9PSBOVUxMKQorCQkJcmV0dXJuOworCQl2Kys7CisJfQorCisJZ19oYXNoX3RhYmxlX2luc2Vy dChkZXYtPmF0dHJzX2h0LCBzdHJkdXAoa2V5KSwgc3RyZHVwKHYpKTsKK30KKworLyogSXRlcmF0 ZSBvdmVyIHVkZXYgcHJvcGVydGllcyBsaXN0IGFuZCByZXdyaXRlIGl0IHRvIGlndF9kZXZpY2Ug cHJvcGVydGllcworICogaGFzaCB0YWJsZSBmb3IgaW5zdGFudCBhY2Nlc3MuCisgKi8KK3N0YXRp YyB2b2lkIGdldF9wcm9wcyhzdHJ1Y3QgdWRldl9kZXZpY2UgKmRldiwgc3RydWN0IGlndF9kZXZp Y2UgKmlkZXYpCit7CisJc3RydWN0IHVkZXZfbGlzdF9lbnRyeSAqZW50cnk7CisKKwllbnRyeSA9 IHVkZXZfZGV2aWNlX2dldF9wcm9wZXJ0aWVzX2xpc3RfZW50cnkoZGV2KTsKKwl3aGlsZSAoZW50 cnkpIHsKKwkJY29uc3QgY2hhciAqbmFtZSA9IHVkZXZfbGlzdF9lbnRyeV9nZXRfbmFtZShlbnRy eSk7CisJCWNvbnN0IGNoYXIgKnZhbHVlID0gdWRldl9saXN0X2VudHJ5X2dldF92YWx1ZShlbnRy eSk7CisKKwkJaWd0X2RldmljZV9hZGRfcHJvcChpZGV2LCBuYW1lLCB2YWx1ZSk7CisJCWVudHJ5 ID0gdWRldl9saXN0X2VudHJ5X2dldF9uZXh0KGVudHJ5KTsKKwkJREJHKCJwcm9wOiAlcywgdmFs OiAlc1xuIiwgbmFtZSwgdmFsdWUpOworCX0KK30KKworLyogU2FtZSBhcyBnZXRfcHJvcHMoKSwg YnV0IHJld3JpdGVzIHN5c2F0dHJzLiBSZXNvbHZlcyBzeW1ib2xpYyBsaW5rcworICogbm90IGhh bmRsZWQgYnkgdWRldiBnZXRfc3lzYXR0cl92YWx1ZSgpLgorICogRnVuY3Rpb24gc2tpcHMgc3lz YXR0cnMgZnJvbSBibGFja2xpc3QgaHQgKGFjcXVpcmluZyBzb21lIHZhbHVlcyBjYW4gdGFrZQor ICogc2Vjb25kcykuCisgKi8KK3N0YXRpYyB2b2lkIGdldF9hdHRycyhzdHJ1Y3QgdWRldl9kZXZp Y2UgKmRldiwgc3RydWN0IGlndF9kZXZpY2UgKmlkZXYpCit7CisJc3RydWN0IHVkZXZfbGlzdF9l bnRyeSAqZW50cnk7CisKKwllbnRyeSA9IHVkZXZfZGV2aWNlX2dldF9zeXNhdHRyX2xpc3RfZW50 cnkoZGV2KTsKKwl3aGlsZSAoZW50cnkpIHsKKwkJY29uc3QgY2hhciAqa2V5ID0gdWRldl9saXN0 X2VudHJ5X2dldF9uYW1lKGVudHJ5KTsKKwkJY29uc3QgY2hhciAqdmFsdWU7CisKKwkJaWYgKGlz X29uX2JsYWNrbGlzdChrZXkpKSB7CisJCQllbnRyeSA9IHVkZXZfbGlzdF9lbnRyeV9nZXRfbmV4 dChlbnRyeSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXZhbHVlID0gdWRldl9kZXZpY2VfZ2V0 X3N5c2F0dHJfdmFsdWUoZGV2LCBrZXkpOworCQlpZ3RfZGV2aWNlX2FkZF9hdHRyKGlkZXYsIGtl eSwgdmFsdWUpOworCQllbnRyeSA9IHVkZXZfbGlzdF9lbnRyeV9nZXRfbmV4dChlbnRyeSk7CisJ CURCRygiYXR0cjogJXMsIHZhbDogJXNcbiIsIGtleSwgdmFsdWUpOworCX0KK30KKworI2RlZmlu ZSBnZXRfcHJvcChkZXYsIHByb3ApICgoY2hhciAqKSBnX2hhc2hfdGFibGVfbG9va3VwKGRldi0+ cHJvcHNfaHQsIHByb3ApKQorI2RlZmluZSBnZXRfYXR0cihkZXYsIGF0dHIpICgoY2hhciAqKSBn X2hhc2hfdGFibGVfbG9va3VwKGRldi0+YXR0cnNfaHQsIGF0dHIpKQorI2RlZmluZSBnZXRfcHJv cF9zdWJzeXN0ZW0oZGV2KSBnZXRfcHJvcChkZXYsICJTVUJTWVNURU0iKQorI2RlZmluZSBpc19k cm1fc3Vic3lzdGVtKGRldikgIChzdHJlcXVhbChnZXRfcHJvcF9zdWJzeXN0ZW0oZGV2KSwgImRy bSIpKQorI2RlZmluZSBpc19wY2lfc3Vic3lzdGVtKGRldikgIChzdHJlcXVhbChnZXRfcHJvcF9z dWJzeXN0ZW0oZGV2KSwgInBjaSIpKQorCisvKiBHZXRzIFBDSV9JRCBwcm9wZXJ0eSwgc3BsaXRz IHRvIHh4eHg6eXl5eSBhbmQgc3RvcmVzCisgKiB4eHh4IHRvIGRldi0+dmVuZG9yIGFuZCB5eXl5 IHRvIGRldi0+ZGV2aWNlIGZvcgorICogZmFzdGVyIGFjY2Vzcy4KKyAqLworc3RhdGljIHZvaWQg c2V0X3ZlbmRvcl9kZXZpY2Uoc3RydWN0IGlndF9kZXZpY2UgKmRldikKK3sKKwljb25zdCBjaGFy ICpwY2lfaWQgPSBnZXRfcHJvcChkZXYsICJQQ0lfSUQiKTsKKworCWlmICghcGNpX2lkIHx8IHN0 cmxlbihwY2lfaWQpICE9IDkpCisJCXJldHVybjsKKwlkZXYtPnZlbmRvciA9IHN0cm5kdXAocGNp X2lkLCA0KTsKKwlkZXYtPmRldmljZSA9IHN0cm5kdXAocGNpX2lkICsgNSwgNCk7Cit9CisKKy8q IEFsbG9jYXRlIGFycmF5cyBmb3Iga2VlcGluZyBzY2FubmVkIGRldmljZXMgKi8KK3N0YXRpYyBi b29sIHByZXBhcmVfc2Nhbih2b2lkKQoreworCWlmIChpZ3RfZGV2cy5hbGwucHJldiA9PSBOVUxM IHx8IGlndF9kZXZzLmFsbC5uZXh0ID09IE5VTEwpCisJCWlndF9saXN0X2luaXQoJmlndF9kZXZz LmFsbCk7CisKKwlpZiAoaWd0X2RldnMuZmlsdGVyZWQucHJldiA9PSBOVUxMIHx8IGlndF9kZXZz LmZpbHRlcmVkLm5leHQgPT0gTlVMTCkKKwkJaWd0X2xpc3RfaW5pdCgmaWd0X2RldnMuZmlsdGVy ZWQpOworCisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGNoYXIqIHN0cmR1cF9udWxsc2Fm ZShjb25zdCBjaGFyKiBzdHIpCit7CisJaWYgKHN0ciA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsK KworCXJldHVybiBzdHJkdXAoc3RyKTsKK30KKworLyogQ3JlYXRlIG5ldyBpZ3RfZGV2aWNlIGZy b20gdWRldiBkZXZpY2UuCisgKiBGaWxscyBzdHJ1Y3R1cmUgd2l0aCBtb3N0IHVzYWJsZSB1ZGV2 IGRldmljZSB2YXJpYWJsZXMsIHByb3BlcnRpZXMKKyAqIGFuZCBzeXNhdHRycy4KKyAqLworc3Rh dGljIHN0cnVjdCBpZ3RfZGV2aWNlICppZ3RfZGV2aWNlX25ld19mcm9tX3VkZXYoc3RydWN0IHVk ZXZfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGlndF9kZXZpY2UgKmlkZXYgPSBpZ3RfZGV2aWNl X25ldygpOworCisJaWd0X2Fzc2VydChpZGV2KTsKKwlpZGV2LT5zeXNwYXRoID0gc3RyZHVwX251 bGxzYWZlKHVkZXZfZGV2aWNlX2dldF9zeXNwYXRoKGRldikpOworCWlkZXYtPnN1YnN5c3RlbSA9 IHN0cmR1cF9udWxsc2FmZSh1ZGV2X2RldmljZV9nZXRfc3Vic3lzdGVtKGRldikpOworCWlkZXYt PmRldm5vZGUgPSBzdHJkdXBfbnVsbHNhZmUodWRldl9kZXZpY2VfZ2V0X2Rldm5vZGUoZGV2KSk7 CisKKwlpZiAoaWRldi0+ZGV2bm9kZSAmJiBzdHJzdHIoaWRldi0+ZGV2bm9kZSwgIi9kZXYvZHJp L2NhcmQiKSkKKwkJaWRldi0+ZHJtX2NhcmQgPSBzdHJkdXAoaWRldi0+ZGV2bm9kZSk7CisJZWxz ZSBpZiAoaWRldi0+ZGV2bm9kZSAmJiBzdHJzdHIoaWRldi0+ZGV2bm9kZSwgIi9kZXYvZHJpL3Jl bmRlciIpKQorCQlpZGV2LT5kcm1fcmVuZGVyID0gc3RyZHVwKGlkZXYtPmRldm5vZGUpOworCisJ Z2V0X3Byb3BzKGRldiwgaWRldik7CisJZ2V0X2F0dHJzKGRldiwgaWRldik7CisKKwlyZXR1cm4g aWRldjsKK30KKworLyogSXRlcmF0ZSBvdmVyIGFsbCBpZ3RfZGV2aWNlcyBhcnJheSBhbmQgZmlu ZCBvbmUgbWF0Y2hlZCB0bworICogc3Vic3lzdGVtIGFuZCBzeXNwYXRoLgorICovCitzdGF0aWMg c3RydWN0IGlndF9kZXZpY2UgKmlndF9kZXZpY2VfZmluZChjb25zdCBjaGFyICpzdWJzeXN0ZW0s CisJCQkJCSAgY29uc3QgY2hhciAqc3lzcGF0aCkKK3sKKwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2 OworCisJaWd0X2xpc3RfZm9yX2VhY2goZGV2LCAmaWd0X2RldnMuYWxsLCBsaW5rKQorCXsKKwkJ aWYgKHN0cmNtcChkZXYtPnN1YnN5c3RlbSwgc3Vic3lzdGVtKSA9PSAwICYmCisJCQlzdHJjbXAo ZGV2LT5zeXNwYXRoLCBzeXNwYXRoKSA9PSAwKQorCQkJcmV0dXJuIGRldjsKKwl9CisKKwlyZXR1 cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBpZ3RfZGV2aWNlICppZ3RfZGV2aWNlX2Zyb21f c3lzcGF0aChjb25zdCBjaGFyICpzeXNwYXRoKQoreworCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXY7 CisKKwlpZ3RfbGlzdF9mb3JfZWFjaChkZXYsICZpZ3RfZGV2cy5hbGwsIGxpbmspCisJeworCQlp ZiAoc3RyY21wKGRldi0+c3lzcGF0aCwgc3lzcGF0aCkgPT0gMCkKKwkJCXJldHVybiBkZXY7CisJ fQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIEZvciBlYWNoIGRybSBpZ3RfZGV2aWNlIGFkZCBv ciB1cGRhdGUgaXRzIHBhcmVudCBpZ3RfZGV2aWNlIHRvIHRoZSBhcnJheS4KKyAqIEFzIGNhcmQv cmVuZGVyIGRybSBkZXZpY2VzIG1vc3RseSBoYXZlIHNhbWUgcGFyZW50ICh2a21zIGlzIGFuIGV4 Y2VwdGlvbikKKyAqIGxpbmsgdG8gaXQgYW5kIHVwZGF0ZSBjb3JyZXNwb25kaW5nIGRybV9jYXJk IC8gZHJtX3JlbmRlciBmaWVsZHMuCisgKi8KK3N0YXRpYyB2b2lkIHVwZGF0ZV9vcl9hZGRfcGFy ZW50KHN0cnVjdCB1ZGV2X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgaWd0X2RldmljZSAqaWRl dikKK3sKKwlzdHJ1Y3QgdWRldl9kZXZpY2UgKnBhcmVudF9kZXY7CisJc3RydWN0IGlndF9kZXZp Y2UgKnBhcmVudF9pZGV2OworCWNvbnN0IGNoYXIgKnN1YnN5c3RlbSwgKnN5c3BhdGgsICpkZXZu YW1lOworCisJcGFyZW50X2RldiA9IHVkZXZfZGV2aWNlX2dldF9wYXJlbnQoZGV2KTsKKwlpZ3Rf YXNzZXJ0KHBhcmVudF9kZXYpOworCisJc3Vic3lzdGVtID0gdWRldl9kZXZpY2VfZ2V0X3N1YnN5 c3RlbShwYXJlbnRfZGV2KTsKKwlzeXNwYXRoID0gdWRldl9kZXZpY2VfZ2V0X3N5c3BhdGgocGFy ZW50X2Rldik7CisKKwlwYXJlbnRfaWRldiA9IGlndF9kZXZpY2VfZmluZChzdWJzeXN0ZW0sIHN5 c3BhdGgpOworCWlmICghcGFyZW50X2lkZXYpIHsKKwkJcGFyZW50X2lkZXYgPSBpZ3RfZGV2aWNl X25ld19mcm9tX3VkZXYocGFyZW50X2Rldik7CisJCWlmIChpc19wY2lfc3Vic3lzdGVtKHBhcmVu dF9pZGV2KSkgeworCQkJc2V0X3ZlbmRvcl9kZXZpY2UocGFyZW50X2lkZXYpOworCQl9CisJCWln dF9saXN0X2luc2VydF90YWlsKCZpZ3RfZGV2cy5hbGwsICZwYXJlbnRfaWRldi0+bGluayk7CisJ fQorCWRldm5hbWUgPSB1ZGV2X2RldmljZV9nZXRfZGV2bm9kZShkZXYpOworCWlmIChkZXZuYW1l ICE9IE5VTEwgJiYgc3Ryc3RyKGRldm5hbWUsICIvZGV2L2RyaS9jYXJkIikpCisJCXBhcmVudF9p ZGV2LT5kcm1fY2FyZCA9IHN0cmR1cChkZXZuYW1lKTsKKwllbHNlIGlmIChkZXZuYW1lICE9IE5V TEwgJiYgc3Ryc3RyKGRldm5hbWUsICIvZGV2L2RyaS9yZW5kZXIiKSkKKwkJcGFyZW50X2lkZXYt PmRybV9yZW5kZXIgPSBzdHJkdXAoZGV2bmFtZSk7CisKKwlpZGV2LT5wYXJlbnQgPSBwYXJlbnRf aWRldjsKK30KKworc3RhdGljIHN0cnVjdCBpZ3RfZGV2aWNlICpkdXBsaWNhdGVfZGV2aWNlKHN0 cnVjdCBpZ3RfZGV2aWNlICpkZXYpIHsKKwlzdHJ1Y3QgaWd0X2RldmljZSAqZHVwID0gbWFsbG9j KHNpemVvZigqZHVwKSk7CisJbWVtY3B5KGR1cCwgZGV2LCBzaXplb2YoKmRldikpOworCWR1cC0+ bGluay5wcmV2ID0gTlVMTDsKKwlkdXAtPmxpbmsubmV4dCA9IE5VTEw7CisJcmV0dXJuIGR1cDsK K30KKworc3RhdGljIGdpbnQgZGV2c19jb21wYXJlKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQg KmIpCit7CisJc3RydWN0IGlndF9kZXZpY2UgKmRldjEsICpkZXYyOworCWludCByZXQ7CisKKwlk ZXYxID0gKihzdHJ1Y3QgaWd0X2RldmljZSAqKikgYTsKKwlkZXYyID0gKihzdHJ1Y3QgaWd0X2Rl dmljZSAqKikgYjsKKwlyZXQgPSBzdHJjbXAoZGV2MS0+c3Vic3lzdGVtLCBkZXYyLT5zdWJzeXN0 ZW0pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gc3RyY21wKGRldjEtPnN5 c3BhdGgsIGRldjItPnN5c3BhdGgpOworfQorCitzdGF0aWMgdm9pZCBzb3J0X2FsbF9kZXZpY2Vz KHZvaWQpCit7CisJc3RydWN0IGlndF9kZXZpY2UgKmRldiwgKnRtcDsKKwlpbnQgbGVuID0gaWd0 X2xpc3RfbGVuZ3RoKCZpZ3RfZGV2cy5hbGwpOworCXN0cnVjdCBpZ3RfZGV2aWNlICoqZGV2cyA9 IG1hbGxvYyhsZW4gKiBzaXplb2YoKmRldikpOworCisJaW50IGkgPSAwOworCWlndF9saXN0X2Zv cl9lYWNoX3NhZmUoZGV2LCB0bXAsICZpZ3RfZGV2cy5hbGwsIGxpbmspIHsKKwkJZGV2c1tpXSA9 IGRldjsKKwkJaWd0X2Fzc2VydChpKysgPCBsZW4pOworCQlpZ3RfbGlzdF9yZW1vdmUoJmRldi0+ bGluayk7CisJfQorCisJcXNvcnQoZGV2cywgbGVuLCBzaXplb2YoKmRldnMpLCBkZXZzX2NvbXBh cmUpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7CisJCWlndF9saXN0X2luc2VydF90 YWlsKCZpZ3RfZGV2cy5hbGwsICZkZXZzW2ldLT5saW5rKTsKKwl9Cit9CisKKy8qIENvcmUgc2Nh bm5pbmcgZnVuY3Rpb24uCisgKgorICogQWxsIHNjYW5uZWQgZGV2aWNlcyBhcmUga2VwdCBpbnNp ZGUgaWd0X2RldnMuYWxsIHBvaW50ZXIgYXJyYXkuCisgKiBFYWNoIGFkZGVkIGRldmljZSBpcyBp Z3RfZGV2aWNlIHN0cnVjdHVyZSwgd2hpY2ggY29udHJhcnkgdG8gdWRldiBkZXZpY2UKKyAqIGhh cyBwcm9wZXJ0aWVzIC8gc3lzYXR0cnMgc3RvcmVkIGluc2lkZSBoYXNoIHRhYmxlIGluc3RlYWQg b2YgbGlzdC4KKyAqCisgKiBGdW5jdGlvbiBpdGVyYXRlcyBvdmVyIGRldmljZXMgb24gJ2RybScg c3Vic3lzdGVtLiBGb3IgZWFjaCBkcm0gZGV2aWNlCisgKiBpdHMgcGFyZW50IGlzIHRha2VuIChi dXMgZGV2aWNlKSBhbmQgc3RvcmVkIGluc2lkZSBzYW1lIGFycmF5LgorICogRnVuY3Rpb24gc29y dHMgYWxsIGZvdW5kIGRldmljZXMgdG8ga2VlcCBzYW1lIG9yZGVyIG9mIGJ1cyBkZXZpY2VzCisg KiBmb3IgcHJvdmlkaW5nIHByZWRpY3RhYmxlIHNlYXJjaC4KKyAqLworc3RhdGljIHZvaWQgc2Nh bl9kcm1fZGV2aWNlcyh2b2lkKQoreworCXN0cnVjdCB1ZGV2ICp1ZGV2OworCXN0cnVjdCB1ZGV2 X2VudW1lcmF0ZSAqZW51bWVyYXRlOworCXN0cnVjdCB1ZGV2X2xpc3RfZW50cnkgKmRldmljZXMs ICpkZXZfbGlzdF9lbnRyeTsKKwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2OworCWludCByZXQ7CisK Kwl1ZGV2ID0gdWRldl9uZXcoKTsKKwlpZ3RfYXNzZXJ0KHVkZXYpOworCisJZW51bWVyYXRlID0g dWRldl9lbnVtZXJhdGVfbmV3KHVkZXYpOworCWlndF9hc3NlcnQoZW51bWVyYXRlKTsKKworCURC RygiU2Nhbm5pbmcgZHJtIHN1YnN5c3RlbVxuIik7CisJcmV0ID0gdWRldl9lbnVtZXJhdGVfYWRk X21hdGNoX3N1YnN5c3RlbShlbnVtZXJhdGUsICJkcm0iKTsKKwlpZ3RfYXNzZXJ0KCFyZXQpOwor CisJdWRldl9lbnVtZXJhdGVfYWRkX21hdGNoX3Byb3BlcnR5KGVudW1lcmF0ZSwgIkRFVk5BTUUi LCAiL2Rldi9kcmkvKiIpOworCWlndF9hc3NlcnQoIXJldCk7CisKKwlyZXQgPSB1ZGV2X2VudW1l cmF0ZV9zY2FuX2RldmljZXMoZW51bWVyYXRlKTsKKwlpZ3RfYXNzZXJ0KCFyZXQpOworCisJZGV2 aWNlcyA9IHVkZXZfZW51bWVyYXRlX2dldF9saXN0X2VudHJ5KGVudW1lcmF0ZSk7CisJaWYgKCFk ZXZpY2VzKQorCQlyZXR1cm47CisKKwl1ZGV2X2xpc3RfZW50cnlfZm9yZWFjaChkZXZfbGlzdF9l bnRyeSwgZGV2aWNlcykgeworCQljb25zdCBjaGFyICpwYXRoOworCQlzdHJ1Y3QgdWRldl9kZXZp Y2UgKnVkZXZfZGV2OworCQlzdHJ1Y3QgaWd0X2RldmljZSAqaWRldjsKKworCQlwYXRoID0gdWRl dl9saXN0X2VudHJ5X2dldF9uYW1lKGRldl9saXN0X2VudHJ5KTsKKwkJdWRldl9kZXYgPSB1ZGV2 X2RldmljZV9uZXdfZnJvbV9zeXNwYXRoKHVkZXYsIHBhdGgpOworCQlpZGV2ID0gaWd0X2Rldmlj ZV9uZXdfZnJvbV91ZGV2KHVkZXZfZGV2KTsKKwkJdXBkYXRlX29yX2FkZF9wYXJlbnQodWRldl9k ZXYsIGlkZXYpOworCQlpZ3RfbGlzdF9pbnNlcnRfdGFpbCgmaWd0X2RldnMuYWxsLCAmaWRldi0+ bGluayk7CisKKwkJdWRldl9kZXZpY2VfdW5yZWYodWRldl9kZXYpOworCX0KKwl1ZGV2X2VudW1l cmF0ZV91bnJlZihlbnVtZXJhdGUpOworCXVkZXZfdW5yZWYodWRldik7CisKKwlzb3J0X2FsbF9k ZXZpY2VzKCk7CisKKwlpZ3RfbGlzdF9mb3JfZWFjaChkZXYsICZpZ3RfZGV2cy5hbGwsIGxpbmsp IHsKKwkJc3RydWN0IGlndF9kZXZpY2UgKmRldl9kdXAgPSBkdXBsaWNhdGVfZGV2aWNlKGRldik7 CisJCWlndF9saXN0X2luc2VydF90YWlsKCZpZ3RfZGV2cy5maWx0ZXJlZCwgJmRldl9kdXAtPmxp bmspOworCX0KK30KKworc3RhdGljIHZvaWQgaWd0X2RldmljZV9mcmVlKHN0cnVjdCBpZ3RfZGV2 aWNlICpkZXYpCit7CisJZnJlZShkZXYtPmRldm5vZGUpOworCWZyZWUoZGV2LT5zdWJzeXN0ZW0p OworCWZyZWUoZGV2LT5zeXNwYXRoKTsKKwlmcmVlKGRldi0+ZHJtX2NhcmQpOworCWZyZWUoZGV2 LT5kcm1fcmVuZGVyKTsKKwlmcmVlKGRldi0+dmVuZG9yKTsKKwlmcmVlKGRldi0+ZGV2aWNlKTsK KwlnX2hhc2hfdGFibGVfZGVzdHJveShkZXYtPmF0dHJzX2h0KTsKKwlnX2hhc2hfdGFibGVfZGVz dHJveShkZXYtPnByb3BzX2h0KTsKK30KKworLyoqCisgKiBpZ3RfZGV2aWNlc19zY2FuCisgKiBA Zm9yY2U6IGVuZm9yY2Ugc2Nhbm5pbmcgZGV2aWNlcworICoKKyAqIEZ1bmN0aW9uIHNjYW5zIHVk ZXYgaW4gc2VhcmNoIG9mIGdwdSBkZXZpY2VzLiBGb3IgZmlyc3QgcnVuIGl0IGNhbiBiZQorICog Y2FsbGVkIHdpdGggQGZvcmNlID0gZmFsc2UuIElmIHNvbWV0aGluZyBjaGFuZ2VzIGR1cmluZyB0 aGUgdGhlIHRlc3QKKyAqIG9yIHRlc3QgZG9lcyBzb21lIG1vZHVsZSBsb2FkaW5nIChuZXcgZHJt IGRldmljZXMgb2NjdXJzIGR1cmluZyBleGVjdXRpb24pCisgKiBmdW5jdGlvbiBtdXN0IGJlIGNh bGxlZCBhZ2FpbiB3aXRoIEBmb3JjZSA9IHRydWUgdG8gcmVmcmVzaCBkZXZpY2UgYXJyYXkuCisg Ki8KK3ZvaWQgaWd0X2RldmljZXNfc2Nhbihib29sIGZvcmNlKQoreworCWlmIChmb3JjZSAmJiBp Z3RfZGV2cy5kZXZzX3NjYW5uZWQpIHsKKwkJc3RydWN0IGlndF9kZXZpY2UgKmRldiwgKnRtcDsK KwkJaWd0X2xpc3RfZm9yX2VhY2hfc2FmZShkZXYsIHRtcCwgJmlndF9kZXZzLmFsbCwgbGluaykg eworCQkJaWd0X2RldmljZV9mcmVlKGRldik7CisJCQlmcmVlKGRldik7CisJCX0KKworCQlpZ3Rf ZGV2cy5kZXZzX3NjYW5uZWQgPSBmYWxzZTsKKwl9CisKKwlpZiAoaWd0X2RldnMuZGV2c19zY2Fu bmVkKQorCQlyZXR1cm47CisKKwlwcmVwYXJlX3NjYW4oKTsKKwlzY2FuX2RybV9kZXZpY2VzKCk7 CisKKwlpZ3RfZGV2cy5kZXZzX3NjYW5uZWQgPSB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIHZv aWQgX3ByX3NpbXBsZShjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2KQoreworCXByaW50Zigi ICAgICUtMTZzOiAlc1xuIiwgaywgdik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfcHJfc2lt cGxlMihjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2MSwgY29uc3QgY2hhciAqdjIpCit7CisJ cHJpbnRmKCIgICAgJS0xNnM6ICVzOiVzXG4iLCBrLCB2MSwgdjIpOworfQorCitzdGF0aWMgdm9p ZCBpZ3RfZGV2c19wcmludF9zaW1wbGUoc3RydWN0IGlndF9saXN0ICp2aWV3KQoreworCXN0cnVj dCBpZ3RfZGV2aWNlICpkZXY7CisKKwlpZiAoIXZpZXcpCisJCXJldHVybjsKKworCWlmIChpZ3Rf bGlzdF9lbXB0eSh2aWV3KSkgeworCQlwcmludGYoIk5vIEdQVSBkZXZpY2VzIGZvdW5kXG4iKTsK KwkJcmV0dXJuOworCX0KKworCWlndF9saXN0X2Zvcl9lYWNoKGRldiwgdmlldywgbGluaykgewor CQlwcmludGYoInN5czolc1xuIiwgZGV2LT5zeXNwYXRoKTsKKwkJaWYgKGRldi0+c3Vic3lzdGVt KQorCQkJX3ByX3NpbXBsZSgic3Vic3lzdGVtIiwgZGV2LT5zdWJzeXN0ZW0pOworCQlpZiAoZGV2 LT5kcm1fY2FyZCkKKwkJCV9wcl9zaW1wbGUoImRybSBjYXJkIiwgZGV2LT5kcm1fY2FyZCk7CisJ CWlmIChkZXYtPmRybV9yZW5kZXIpCisJCQlfcHJfc2ltcGxlKCJkcm0gcmVuZGVyIiwgZGV2LT5k cm1fcmVuZGVyKTsKKwkJaWYgKGlzX2RybV9zdWJzeXN0ZW0oZGV2KSkgeworCQkJX3ByX3NpbXBs ZTIoInBhcmVudCIsICJzeXMiLAorCQkJCSAgIGRldi0+cGFyZW50LT5zeXNwYXRoKTsKKwkJfSBl bHNlIHsKKwkJCWlmIChpc19wY2lfc3Vic3lzdGVtKGRldikpIHsKKwkJCQlfcHJfc2ltcGxlKCJ2 ZW5kb3IiLCBkZXYtPnZlbmRvcik7CisJCQkJX3ByX3NpbXBsZSgiZGV2aWNlIiwgZGV2LT5kZXZp Y2UpOworCQkJfQorCQl9CisJCXByaW50ZigiXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUg dm9pZCBfcHJpbnRfa2V5X3ZhbHVlKGNvbnN0IGNoYXIqIGssIGNvbnN0IGNoYXIgKnYpCit7CisJ cHJpbnRmKCIlLTMyczogJXNcbiIsIGssIHYpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9odChH SGFzaFRhYmxlICpodCkKK3sKKwlHTGlzdCAqa2V5cyA9IGdfaGFzaF90YWJsZV9nZXRfa2V5cyho dCk7CisKKwlrZXlzID0gZ19saXN0X3NvcnQoa2V5cywgKEdDb21wYXJlRnVuYykgc3RyY21wKTsK Kwl3aGlsZSAoa2V5cykgeworCQljaGFyICprID0gKGNoYXIgKikga2V5cy0+ZGF0YTsKKwkJY2hh ciAqdiA9IGdfaGFzaF90YWJsZV9sb29rdXAoaHQsIGspOworCisJCV9wcmludF9rZXlfdmFsdWUo aywgdik7CisJCWtleXMgPSBnX2xpc3RfbmV4dChrZXlzKTsKKwl9CisJZ19saXN0X2ZyZWUoa2V5 cyk7Cit9CisKK3N0YXRpYyB2b2lkIGlndF9kZXZzX3ByaW50X2RldGFpbChzdHJ1Y3QgaWd0X2xp c3QgKnZpZXcpCit7CisJc3RydWN0IGlndF9kZXZpY2UgKmRldjsKKworCWlmICghdmlldykKKwkJ cmV0dXJuOworCisJaWYgKGlndF9saXN0X2VtcHR5KHZpZXcpKSB7CisJCXByaW50ZigiTm8gR1BV IGRldmljZXMgZm91bmRcbiIpOworCQlyZXR1cm47CisJfQorCisJaWd0X2xpc3RfZm9yX2VhY2go ZGV2LCB2aWV3LCBsaW5rKSB7CisJCXByaW50ZigiPT09PT09PT09PSAlczolcyA9PT09PT09PT09 XG4iLAorCQkgICAgICAgZGV2LT5zdWJzeXN0ZW0sIGRldi0+c3lzcGF0aCk7CisJCWlmICghaXNf ZHJtX3N1YnN5c3RlbShkZXYpKSB7CisJCQlfcHJpbnRfa2V5X3ZhbHVlKCJjYXJkIGRldmljZSIs IGRldi0+ZHJtX2NhcmQpOworCQkJX3ByaW50X2tleV92YWx1ZSgicmVuZGVyIGRldmljZSIsIGRl di0+ZHJtX3JlbmRlcik7CisJCX0KKworCQlwcmludGYoIlxuW3Byb3BlcnRpZXNdXG4iKTsKKwkJ cHJpbnRfaHQoZGV2LT5wcm9wc19odCk7CisJCXByaW50ZigiXG5bYXR0cmlidXRlc11cbiIpOwor CQlwcmludF9odChkZXYtPmF0dHJzX2h0KTsKKwkJcHJpbnRmKCJcbiIpOworCX0KK30KKworc3Rh dGljIHN0cnVjdCBwcmludF9mdW5jIHsKKwl2b2lkICgqcHJuKShzdHJ1Y3QgaWd0X2xpc3QgKnZp ZXcpOworfSBwcmludF9mdW5jdGlvbnNbXSA9IHsKKwlbSUdUX1BSSU5UX1NJTVBMRV0gPSB7IC5w cm4gPSBpZ3RfZGV2c19wcmludF9zaW1wbGUgfSwKKwlbSUdUX1BSSU5UX0RFVEFJTF0gPSB7IC5w cm4gPSBpZ3RfZGV2c19wcmludF9kZXRhaWwgfSwKK307CisKKy8qKgorICogaWd0X2RldmljZXNf cHJpbnQKKyAqIEBwcmludHR5cGU6IElHVF9QUklOVF9TSU1QTEUgb3IgSUdUX1BSSU5UX0RFVEFJ TAorICoKKyAqIEZ1bmN0aW9uIGNhbiBiZSB1c2VkIGJ5IGV4dGVybmFsIHRvb2wgdG8gcHJpbnQg ZGV2aWNlIGFycmF5IGluIHNpbXBsZQorICogb3IgZGV0YWlsZWQgZm9ybS4gVGhpcyBmdW5jdGlv biBpcyBhZGRlZCBoZXJlIHRvIGF2b2lkIGV4cG9zaW5nCisgKiBpbnRlcm5hbCBpbXBsZW1lbnRh dGlvbiBkYXRhIHN0cnVjdHVyZXMuCisgKi8KK3ZvaWQgaWd0X2RldmljZXNfcHJpbnQoZW51bSBp Z3RfZGV2aWNlc19wcmludF90eXBlIHByaW50dHlwZSkKK3sKKwlwcmludF9mdW5jdGlvbnNbcHJp bnR0eXBlXS5wcm4oJmlndF9kZXZzLmZpbHRlcmVkKTsKK30KKworLyoqCisgKiBpZ3RfZGV2aWNl c19wcmludF92ZW5kb3JzCisgKgorICogUHJpbnQgcGNpIGlkIC0+IHZlbmRvciBtYXBwaW5ncy4g VmVuZG9yIG5hbWVzIHByaW50ZWQgYnkgdGhpcyBmdW5jdGlvbgorICogY2FuIGJlIHVzZWQgZm9y IGZpbHRlcnMgbGlrZSBwY2kgd2hpY2ggYWxsb3dzIHBhc3NpbmcgdmVuZG9yIC0gbGlrZQorICog dmVuZG9yIGlkICg4MDg2KSBvciBhcyBhIHN0cmluZyAoSW50ZWwpLgorICovCit2b2lkIGlndF9k ZXZpY2VzX3ByaW50X3ZlbmRvcnModm9pZCkKK3sKKwlwcmludGYoIlJlY29nbml6ZWQgdmVuZG9y czpcbiIpOworCXByaW50ZigiJS04cyAlLTE2c1xuIiwgIlBDSSBJRCIsICJ2ZW5kb3IiKTsKKwlm b3IgKHR5cGVvZigqcGNpX3ZlbmRvcl9tYXBwaW5nKSAqdm0gPSBwY2lfdmVuZG9yX21hcHBpbmc7 IHZtLT5uYW1lOyB2bSsrKSB7CisJCXByaW50ZigiJS04cyAlLTE2c1xuIiwgdm0tPnZlbmRvcl9p ZCwgdm0tPm5hbWUpOworCX0KK30KKworc3RydWN0IGZpbHRlcjsKKworLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSAqLworc3RydWN0IGZpbHRlcl9jbGFzcyB7CisJc3RydWN0IGlndF9saXN0ICooKmZpbHRl cl9mdW5jdGlvbikoY29uc3Qgc3RydWN0IGZpbHRlcl9jbGFzcyAqZmNscywKKwkJCQkJICAgIGNv bnN0IHN0cnVjdCBmaWx0ZXIgKmZpbHRlcik7CisJYm9vbCAoKmlzX3ZhbGlkKShjb25zdCBzdHJ1 Y3QgZmlsdGVyX2NsYXNzICpmY2xzLAorCQkJIGNvbnN0IHN0cnVjdCBmaWx0ZXIgKmZpbHRlcik7 CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpoZWxwOworCWNvbnN0IGNoYXIgKmRl dGFpbDsKK307CisKKyNkZWZpbmUgRklMVEVSX05BTUVfTEVOIDMyCisjZGVmaW5lIEZJTFRFUl9E QVRBX0xFTiAyNTYKKworc3RydWN0IGZpbHRlciB7CisJc3RydWN0IGZpbHRlcl9jbGFzcyAqY2xh c3M7CisKKwljaGFyIHJhd19kYXRhW0ZJTFRFUl9EQVRBX0xFTl07CisKKwlzdHJ1Y3QgeworCQlj aGFyICp2ZW5kb3I7CisJCWNoYXIgKmRldmljZTsKKwkJY2hhciAqY2FyZDsKKwkJY2hhciAqZHJt OworCQljaGFyICpkcml2ZXI7CisJfSBkYXRhOworfTsKKworc3RhdGljIHZvaWQgZmlsbF9maWx0 ZXJfZGF0YShzdHJ1Y3QgZmlsdGVyICpmaWx0ZXIsIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hh ciAqdmFsdWUpCit7CisJaWYgKGtleSA9PSBOVUxMIHx8IHZhbHVlID09IE5VTEwpIHsKKwkJcmV0 dXJuOworCX0KKworI2RlZmluZSBfX2ZpbGxfa2V5KG5hbWUpIGlmIChzdHJjbXAoa2V5LCAjbmFt ZSkgPT0gMCkgXAorCWZpbHRlci0+ZGF0YS5uYW1lID0gc3RyZHVwKHZhbHVlKQorCV9fZmlsbF9r ZXkodmVuZG9yKTsKKwlfX2ZpbGxfa2V5KGRldmljZSk7CisJX19maWxsX2tleShjYXJkKTsKKwlf X2ZpbGxfa2V5KGRybSk7CisJX19maWxsX2tleShkcml2ZXIpOworI3VuZGVmIF9fZmlsbF9rZXkK KworfQorCitzdGF0aWMgdm9pZCBzcGxpdF9maWx0ZXJfZGF0YShzdHJ1Y3QgZmlsdGVyICpmaWx0 ZXIpCit7CisJY2hhciAqcHJvcGVydHksICprZXksICpkYXRhLCAqZHVwOworCisJZHVwID0gc3Ry ZHVwKGZpbHRlci0+cmF3X2RhdGEpOworCWRhdGEgPSBkdXA7CisKKwl3aGlsZSAoKHByb3BlcnR5 ID0gc3Ryc2VwKCZkYXRhLCAiLCIpKSkgeworCQlrZXkgPSBzdHJzZXAoJnByb3BlcnR5LCAiPSIp OworCQlmaWxsX2ZpbHRlcl9kYXRhKGZpbHRlciwga2V5LCBwcm9wZXJ0eSk7CisJfQorCisJZnJl ZShkdXApOworfQorCitzdGF0aWMgc3RydWN0IGZpbHRlcl9jbGFzcyAqZ2V0X2ZpbHRlcl9jbGFz cyhjb25zdCBjaGFyICpjbGFzc19uYW1lLCBjb25zdCBzdHJ1Y3QgZmlsdGVyICpmaWx0ZXIpOwor CitzdGF0aWMgYm9vbCBwYXJzZV9maWx0ZXIoY29uc3QgY2hhciAqZnN0ciwgc3RydWN0IGZpbHRl ciAqZmlsdGVyKQoreworCWNoYXIgY2xhc3NfbmFtZVszMl07CisJaWYgKCFmc3RyIHx8ICFmaWx0 ZXIpCisJCXJldHVybiBmYWxzZTsKKworCW1lbXNldChmaWx0ZXIsIDAsIHNpemVvZigqZmlsdGVy KSk7CisKKworCWlmIChzc2NhbmYoZnN0ciwgIiUzMVteOl06JTI1NXMiLCBjbGFzc19uYW1lLCBm aWx0ZXItPnJhd19kYXRhKSA+PSAxKSB7CisJCWZpbHRlci0+Y2xhc3MgPSBnZXRfZmlsdGVyX2Ns YXNzKGNsYXNzX25hbWUsIGZpbHRlcik7CisJCXNwbGl0X2ZpbHRlcl9kYXRhKGZpbHRlcik7CisJ CXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgaXNf dmVuZG9yX21hdGNoZWQoc3RydWN0IGlndF9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqdmVuZG9y KQoreworCWNvbnN0IGNoYXIgKnZlbmRvcl9pZDsKKworCWlmICghZGV2LT52ZW5kb3IgfHwgIXZl bmRvcikKKwkJcmV0dXJuIGZhbHNlOworCisJLyogRmlyc3Qgd2UgY29tcGFyZSB2ZW5kb3IgaWQs IGxpa2UgODA4NiAqLworCWlmICghc3RyY2FzZWNtcChkZXYtPnZlbmRvciwgdmVuZG9yKSkKKwkJ cmV0dXJuIHRydWU7CisKKwkvKiBMaWtlbHkgd2UgaGF2ZSB2ZW5kb3Igc3RyaW5nIGluc3RlYWQg b2YgaWQgKi8KKwl2ZW5kb3JfaWQgPSBnZXRfcGNpX3ZlbmRvcl9pZF9ieV9uYW1lKHZlbmRvcik7 CisJaWYgKCF2ZW5kb3JfaWQpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiAhc3RyY2FzZWNt cChkZXYtPnZlbmRvciwgdmVuZG9yX2lkKTsKK30KKworLyogRmlsdGVyIHdoaWNoIG1hdGNoZXMg c3Vic3lzdGVtOi9zeXMvLi4uIHBhdGguCisgKiBVc2VkIGFzIGZpcnN0IGZpbHRlciBpbiBjaGFp bi4KKyAqLworc3RhdGljIHN0cnVjdCBpZ3RfbGlzdCAqZmlsdGVyX3N5cyhjb25zdCBzdHJ1Y3Qg ZmlsdGVyX2NsYXNzICpmY2xzLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBmaWx0ZXIgKmZpbHRlcikK K3sKKwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2OworCSh2b2lkKSBmY2xzOworCisJREJHKCJmaWx0 ZXIgc3lzXG4iKTsKKwlpZiAoIXN0cmxlbihmaWx0ZXItPnJhd19kYXRhKSkKKwkJcmV0dXJuICZp Z3RfZGV2cy5maWx0ZXJlZDsKKworCWRldiA9IGlndF9kZXZpY2VfZnJvbV9zeXNwYXRoKGZpbHRl ci0+cmF3X2RhdGEpOworCWlmIChkZXYpIHsKKwkJc3RydWN0IGlndF9kZXZpY2UgKmR1cCA9IGR1 cGxpY2F0ZV9kZXZpY2UoZGV2KTsKKwkJaWd0X2xpc3RfaW5zZXJ0X3RhaWwoJmlndF9kZXZzLmZp bHRlcmVkLCAmZHVwLT5saW5rKTsKKwl9CisKKwlyZXR1cm4gJmlndF9kZXZzLmZpbHRlcmVkOwor fQorCisvKiBGaW5kIGRybSBkZXZpY2UgdXNpbmcgZGlyZWN0IHBhdGggdG8gL2Rldi9kcmkvLgor ICogSXQgZXh0ZW5kcyBmaWx0ZXJfc3lzIHRvIGFsbG93IHVzaW5nIGRybTovZGV2L2RyaS9jYXJk WCBhbmQKKyAqIGRybTovZGV2L2RyaS9yZW5kZXJEWCBmaWx0ZXIgc3ludGF4LgorICovCitzdGF0 aWMgc3RydWN0IGlndF9saXN0ICpmaWx0ZXJfZHJtKGNvbnN0IHN0cnVjdCBmaWx0ZXJfY2xhc3Mg KmZjbHMsCisJCQkJICAgY29uc3Qgc3RydWN0IGZpbHRlciAqZmlsdGVyKQoreworCXN0cnVjdCBp Z3RfZGV2aWNlICpkZXY7CisJKHZvaWQpIGZjbHM7CisKKwlEQkcoImZpbHRlciBkcm1cbiIpOwor CWlmICghc3RybGVuKGZpbHRlci0+cmF3X2RhdGEpKQorCQlyZXR1cm4gJmlndF9kZXZzLmZpbHRl cmVkOworCisJaWd0X2xpc3RfZm9yX2VhY2goZGV2LCAmaWd0X2RldnMuYWxsLCBsaW5rKSB7CisJ CWlmICghaXNfZHJtX3N1YnN5c3RlbShkZXYpKQorCQkJY29udGludWU7CisKKwkJaWYgKHN0cmVx dWFsKGRldi0+c3lzcGF0aCwgZmlsdGVyLT5yYXdfZGF0YSkgfHwKKwkJCXN0cmVxdWFsKGRldi0+ ZHJtX2NhcmQsIGZpbHRlci0+cmF3X2RhdGEpIHx8CisJCQlzdHJlcXVhbChkZXYtPmRybV9yZW5k ZXIsIGZpbHRlci0+cmF3X2RhdGEpKSB7CisJCQlzdHJ1Y3QgaWd0X2RldmljZSAqZHVwID0gZHVw bGljYXRlX2RldmljZShkZXYpOworCQkJaWd0X2xpc3RfaW5zZXJ0X3RhaWwoJmlndF9kZXZzLmZp bHRlcmVkLCAmZHVwLT5saW5rKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisKKwlyZXR1cm4gJmln dF9kZXZzLmZpbHRlcmVkOworfQorCisvKiBGaW5kIGFwcHJvcHJpYXRlIHBjaSBkZXZpY2UgbWF0 Y2hpbmcgdmVuZG9yL2RldmljZS9jYXJkIGZpbHRlciBhcmd1bWVudHMuCisgKi8KK3N0YXRpYyBz dHJ1Y3QgaWd0X2xpc3QgKmZpbHRlcl9wY2koY29uc3Qgc3RydWN0IGZpbHRlcl9jbGFzcyAqZmNs cywKKwkJCQkgICBjb25zdCBzdHJ1Y3QgZmlsdGVyICpmaWx0ZXIpCit7CisJc3RydWN0IGlndF9k ZXZpY2UgKmRldjsKKwlpbnQgY2FyZCA9IC0xOworCSh2b2lkKSBmY2xzOworCisJREJHKCJmaWx0 ZXIgcGNpXG4iKTsKKworCWlmIChmaWx0ZXItPmRhdGEuY2FyZCkgeworCQlzc2NhbmYoZmlsdGVy LT5kYXRhLmNhcmQsICIlZCIsICZjYXJkKTsKKwkJaWYgKGNhcmQgPCAwKSB7CisJCQlyZXR1cm4g JmlndF9kZXZzLmZpbHRlcmVkOworCQl9CisJfSBlbHNlIHsKKwkJY2FyZCA9IDA7CisJfQorCisJ aWd0X2xpc3RfZm9yX2VhY2goZGV2LCAmaWd0X2RldnMuYWxsLCBsaW5rKSB7CisJCWlmICghaXNf cGNpX3N1YnN5c3RlbShkZXYpKQorCQkJY29udGludWU7CisKKwkJLyogU2tpcCBpZiAndmVuZG9y JyBkb2Vzbid0IG1hdGNoIChoZXggb3IgbmFtZSkgKi8KKwkJaWYgKGZpbHRlci0+ZGF0YS52ZW5k b3IgJiYgIWlzX3ZlbmRvcl9tYXRjaGVkKGRldiwgZmlsdGVyLT5kYXRhLnZlbmRvcikpCisJCQlj b250aW51ZTsKKworCQkvKiBTa2lwIGlmICdkZXZpY2UnIGRvZXNuJ3QgbWF0Y2ggKi8KKwkJaWYg KGZpbHRlci0+ZGF0YS5kZXZpY2UgJiYgc3RyY2FzZWNtcChmaWx0ZXItPmRhdGEuZGV2aWNlLCBk ZXYtPmRldmljZSkpCisJCQljb250aW51ZTsKKworCQkvKiBXZSBnZXQgbi10aCBjYXJkICovCisJ CWlmICghY2FyZCkgeworCQkJc3RydWN0IGlndF9kZXZpY2UgKmR1cCA9IGR1cGxpY2F0ZV9kZXZp Y2UoZGV2KTsKKwkJCWlndF9saXN0X2luc2VydF90YWlsKCZpZ3RfZGV2cy5maWx0ZXJlZCwgJmR1 cC0+bGluayk7CisJCQlicmVhazsKKwkJfQorCQljYXJkLS07CisJfQorCisJREJHKCJGaWx0ZXIg cGNpIGZpbHRlcmVkIHNpemU6ICVkXG4iLCBpZ3RfbGlzdF9sZW5ndGgoJmlndF9kZXZzLmZpbHRl cmVkKSk7CisKKwlyZXR1cm4gJmlndF9kZXZzLmZpbHRlcmVkOworfQorCitzdGF0aWMgYm9vbCBz eXNfcGF0aF92YWxpZChjb25zdCBzdHJ1Y3QgZmlsdGVyX2NsYXNzICpmY2xzLAorCQkJICAgY29u c3Qgc3RydWN0IGZpbHRlciAqZmlsdGVyKQoreworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKHN0 YXQoZmlsdGVyLT5yYXdfZGF0YSwgJnN0KSkgeworCQlpZ3Rfd2Fybigic3lzX3BhdGhfdmFsaWQ6 IHN5c3BhdGggWyVzXSwgZXJyOiAlc1xuIiwKKwkJCSBmaWx0ZXItPnJhd19kYXRhLCBzdHJlcnJv cihlcnJubykpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKwor c3RhdGljIHN0cnVjdCBmaWx0ZXJfY2xhc3MgZmlsdGVyX2RlZmluaXRpb25fbGlzdFtdID0gewor CXsKKwkJLm5hbWUgPSAic3lzIiwKKwkJLmlzX3ZhbGlkID0gc3lzX3BhdGhfdmFsaWQsCisJCS5m aWx0ZXJfZnVuY3Rpb24gPSBmaWx0ZXJfc3lzLAorCQkuaGVscCA9ICJzeXM6L3N5cy9kZXZpY2Vz L3BjaTAwMDA6MDAvMDAwMDowMDowMi4wIiwKKwkJLmRldGFpbCA9ICJmaW5kIGRldmljZSBieXQg aXRzIHN5c2ZzIHBhdGhcbiIsCisJfSwKKwl7CisJCS5uYW1lID0gImRybSIsCisJCS5maWx0ZXJf ZnVuY3Rpb24gPSBmaWx0ZXJfZHJtLAorCQkuaGVscCA9ICJkcm06L2Rldi9kcmkvKiBwYXRoIiwK KwkJLmRldGFpbCA9ICJmaW5kIGRybSBkZXZpY2UgYnkgL2Rldi9kcmkvKiBub2RlXG4iLAorCX0s CisJeworCQkubmFtZSA9ICJwY2kiLAorCQkuZmlsdGVyX2Z1bmN0aW9uID0gZmlsdGVyX3BjaSwK KwkJLmhlbHAgPSAicGNpOlt2ZW5kb3I9JTA0eC9uYW1lXVssZGV2aWNlPSUwNHhdWyxjYXJkPSVk XSIsCisJCS5kZXRhaWwgPSAidmVuZG9yIGlzIGhleCBudW1iZXIgb3IgdmVuZG9yIG5hbWVcbiIs CisJfSwKKwl7CisJCS5uYW1lID0gTlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBmaWx0 ZXJfY2xhc3MgKmdldF9maWx0ZXJfY2xhc3MoY29uc3QgY2hhciAqY2xhc3NfbmFtZSwgY29uc3Qg c3RydWN0IGZpbHRlciAqZmlsdGVyKQoreworCXN0cnVjdCBmaWx0ZXJfY2xhc3MgKmZjbHMgPSBO VUxMOworCWludCBpID0gMDsKKworCXdoaWxlICgoZmNscyA9ICZmaWx0ZXJfZGVmaW5pdGlvbl9s aXN0W2krK10pLT5uYW1lICE9IE5VTEwpIHsKKwkJaWYgKHN0cmNtcChjbGFzc19uYW1lLCBmY2xz LT5uYW1lKSA9PSAwKQorCQkJcmV0dXJuIGZjbHM7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisK Ky8qKgorICogQGlndF9kZXZpY2VfcHJpbnRfZmlsdGVyX3R5cGVzCisgKgorICogUHJpbnQgYWxs IGZpbHRlcnMgc3ludGF4IGZvciBkZXZpY2Ugc2VsZWN0aW9uLgorICovCit2b2lkIGlndF9kZXZp Y2VfcHJpbnRfZmlsdGVyX3R5cGVzKHZvaWQpCit7CisJY29uc3Qgc3RydWN0IGZpbHRlcl9jbGFz cyAqZmlsdGVyID0gTlVMTDsKKwlpbnQgaSA9IDA7CisKKwlwcmludGYoIkZpbHRlciB0eXBlczpc bi0tLVxuIik7CisJcHJpbnRmKCIlLTEycyAgJXNcbi0tLVxuIiwgImZpbHRlciIsICJzeW50YXgi KTsKKworCXdoaWxlICgoZmlsdGVyID0gJmZpbHRlcl9kZWZpbml0aW9uX2xpc3RbaSsrXSktPm5h bWUgIT0gTlVMTCkgeworCQlwcmludGYoIiUtMTJzICAlc1xuIiwgZmlsdGVyLT5uYW1lLCBmaWx0 ZXItPmhlbHApOworCQlwcmludGYoIiUtMTJzICAlc1xuIiwgIiIsIGZpbHRlci0+ZGV0YWlsKTsK Kwl9Cit9CisKK3N0YXRpYyBjaGFyICpkZXZpY2VfZmlsdGVyOworCisvKioKKyAqIGlndF9kZXZp Y2VfaXNfZmlsdGVyX3NldAorICoKKyAqIFJldHVybnMgd2hldGhlciB3ZSBoYXZlIGEgZmlsdGVy IHNldC4KKyAqLworYm9vbCBpZ3RfZGV2aWNlX2lzX2ZpbHRlcl9zZXQodm9pZCkKK3sKKwlyZXR1 cm4gZGV2aWNlX2ZpbHRlciAhPSBOVUxMOworfQorCisvKiBDaGVjayBkb2VzIGZpbHRlciBpcyB2 YWxpZC4gSXQgY2hlY2tzOgorICogMS4gL3N5cy8uLi4gcGF0aCBmaXJzdAorICogMi4gZmlsdGVy IG5hbWUgZnJvbSBmaWx0ZXIgZGVmaW5pdGlvbgorICovCitzdGF0aWMgYm9vbCBpc19maWx0ZXJf dmFsaWQoY29uc3QgY2hhciAqZnN0cikKK3sKKwlzdHJ1Y3QgZmlsdGVyIGZpbHRlcjsKKwlpbnQg cmV0OworCisJcmV0ID0gcGFyc2VfZmlsdGVyKGZzdHIsICZmaWx0ZXIpOworCWlmICghcmV0KQor CQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoZmlsdGVyLmNsYXNzID09IE5VTEwpIHsKKwkJaWd0X3dh cm4oIk5vIGZpbHRlciBtYXRjaGluZyBbJXM6JXNdXG4iLCBmaWx0ZXIuY2xhc3MtPm5hbWUsIGZp bHRlci5yYXdfZGF0YSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoZmlsdGVyLmNsYXNz LT5pc192YWxpZCAhPSBOVUxMICYmICFmaWx0ZXIuY2xhc3MtPmlzX3ZhbGlkKGZpbHRlci5jbGFz cywgJmZpbHRlcikpCisJeworCQlpZ3Rfd2FybigiRmlsdGVyIG5vdCB2YWxpZCBbJXM6JXNdXG4i LCBmaWx0ZXIuY2xhc3MtPm5hbWUsIGZpbHRlci5yYXdfZGF0YSk7CisJCXJldHVybiBmYWxzZTsK Kwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiBpZ3RfZGV2aWNlX2ZpbHRlcl9zZXQK KyAqIEBmaWx0ZXI6IGZpbHRlciB0aGF0IHNob3VsZCBiZSBzZXQgZ2xvYmFsbHkKKyAqCisgKiBS ZXR1cm5zIG51bWJlciBvZiBmaWx0ZXJzIGFkZGVkIHRvIGZpbHRlciBhcnJheS4gQ2FuIGJlIGdy ZWF0ZXIgdGhhbgorICogMSBpZiBAZmlsdGVycyBjb250YWlucyBtb3JlIHRoYW4gb25lIGZpbHRl ciBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9uLgorICovCit2b2lkIGlndF9kZXZpY2VfZmlsdGVyX3Nl dChjb25zdCBjaGFyICpmaWx0ZXIpCit7CisJaWYgKCFpc19maWx0ZXJfdmFsaWQoZmlsdGVyKSkg eworCQlpZ3Rfd2FybigiSW52YWxpZCBmaWx0ZXI6ICVzXG4iLCBmaWx0ZXIpOworCQlyZXR1cm47 CisJfQorCisJZGV2aWNlX2ZpbHRlciA9IHN0cmR1cChmaWx0ZXIpOworfQorCisvKioKKyAqIGln dF9kZXZpY2VfZmlsdGVyX2ZyZWUKKyAqCisgKiBGcmVlIHRoZSBmaWx0ZXIgdGhhdCB3ZSBzdG9y ZSBpbnRlcm5hbGx5LCBlZmZlY3RpdmVseSBpbnNldHRpbmcgaXQuCisgKi8KK3ZvaWQgaWd0X2Rl dmljZV9maWx0ZXJfZnJlZSh2b2lkKQoreworCWlmIChkZXZpY2VfZmlsdGVyICE9IE5VTEwpCisJ CWZyZWUoZGV2aWNlX2ZpbHRlcik7Cit9CisKKy8qKgorICogaWd0X2RldmljZV9maWx0ZXJfZ2V0 CisgKgorICogUmV0dXJucyBmaWx0ZXIgc3RyaW5nIG9yIE5VTEwgaWYgbm90IHNldAorICovCitj b25zdCBjaGFyICppZ3RfZGV2aWNlX2ZpbHRlcl9nZXQodm9pZCkKK3sKKwlyZXR1cm4gZGV2aWNl X2ZpbHRlcjsKK30KKworc3RhdGljIGJvb2wgaWd0X2RldmljZV9maWx0ZXJfYXBwbHkoY29uc3Qg Y2hhciAqZnN0cikKK3sKKwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2LCAqdG1wOworCXN0cnVjdCBm aWx0ZXIgZmlsdGVyOworCWJvb2wgcmV0OworCisJaWYgKCFmc3RyKQorCQlyZXR1cm4gZmFsc2U7 CisKKwlyZXQgPSBwYXJzZV9maWx0ZXIoZnN0ciwgJmZpbHRlcik7CisJaWYgKCFyZXQpIHsKKwkJ aWd0X3dhcm4oIkNhbid0IHNwbGl0IGZpbHRlciBbJXNdXG4iLCBmc3RyKTsKKwkJcmV0dXJuIGZh bHNlOworCX0KKworCS8qIENsZWFuIHRoZSBmaWx0ZXJlZCBsaXN0ICovCisJaWd0X2xpc3RfZm9y X2VhY2hfc2FmZShkZXYsIHRtcCwgJmlndF9kZXZzLmZpbHRlcmVkLCBsaW5rKSB7CisJCWlndF9s aXN0X3JlbW92ZSgmZGV2LT5saW5rKTsKKwkJZnJlZShkZXYpOworCX0KKworCS8qIElmIGZpbHRl ci5kYXRhIGNvbnRhaW5zICIvc3lzIiB1c2UgZGlyZWN0IHBhdGggaW5zdGVhZAorCSAqIGNvbnRl eHR1YWwgZmlsdGVyLgorCSAqLworCisJaWYgKCFmaWx0ZXIuY2xhc3MpIHsKKwkJaWd0X3dhcm4o Ik5vIGZpbHRlciBtYXRjaGluZyBbJXM6JXNdXG4iLCBmaWx0ZXIuY2xhc3MtPm5hbWUsIGZpbHRl ci5yYXdfZGF0YSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisJZmlsdGVyLmNsYXNzLT5maWx0ZXJf ZnVuY3Rpb24oZmlsdGVyLmNsYXNzLCAmZmlsdGVyKTsKKworCXJldHVybiB0cnVlOworfQorCisv KioKKyAqIGlndF9kZXZpY2VfY2FyZF9tYXRjaAorICogQGZpbHRlcjogZmlsdGVyIHN0cmluZwor ICogQGNhcmQ6IHBvaW50ZXIgdG8gaWd0X2RldmljZV9jYXJkIHN0cnVjdAorICoKKyAqIEZ1bmN0 aW9uIGFwcGxpZXMgZmlsdGVyIHRvIG1hdGNoIGRldmljZSBmcm9tIGRldmljZSBhcnJheS4KKyAq CisgKiBSZXR1cm5zOgorICogZmFsc2UgLSBubyBjYXJkIHBvaW50ZXIgd2FzIHBhc3NlZCBvciBj YXJkIHdhc24ndCBtYXRjaGVkLAorICogdHJ1ZSAtIGNhcmQgbWF0Y2hlZCBhbmQgcmV0dXJuZWQu CisgKi8KK2Jvb2wgaWd0X2RldmljZV9jYXJkX21hdGNoKGNvbnN0IGNoYXIgKmZpbHRlciwgc3Ry dWN0IGlndF9kZXZpY2VfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2ID0g TlVMTDsKKworCWlmICghY2FyZCkKKwkJcmV0dXJuIGZhbHNlOworCW1lbXNldChjYXJkLCAwLCBz aXplb2YoKmNhcmQpKTsKKworCWlndF9kZXZpY2VzX3NjYW4oZmFsc2UpOworCisJaWYgKGlndF9k ZXZpY2VfZmlsdGVyX2FwcGx5KGZpbHRlcikgPT0gZmFsc2UpCisJCXJldHVybiBmYWxzZTsKKwor CWlmIChpZ3RfbGlzdF9lbXB0eSgmaWd0X2RldnMuZmlsdGVyZWQpKQorCQlyZXR1cm4gZmFsc2U7 CisKKwkvKiBXZSB0YWtlIGZpcnN0IG9uZSBpZiBtb3JlIHRoYW4gb25lIGNhcmQgbWF0Y2hlcyBm aWx0ZXIgKi8KKwlkZXYgPSBpZ3RfbGlzdF9maXJzdF9lbnRyeSgmaWd0X2RldnMuZmlsdGVyZWQs IGRldiwgbGluayk7CisKKwlpZiAoZGV2LT5zdWJzeXN0ZW0gIT0gTlVMTCkKKwkJc3RybmNweShj YXJkLT5zdWJzeXN0ZW0sIGRldi0+c3Vic3lzdGVtLAorCQkJICAgICBzaXplb2YoY2FyZC0+c3Vi c3lzdGVtKSAtIDEpOworCisJaWYgKGRldi0+ZHJtX2NhcmQgIT0gTlVMTCkKKwkJc3RybmNweShj YXJkLT5jYXJkLCBkZXYtPmRybV9jYXJkLAorCQkJICAgICBzaXplb2YoY2FyZC0+Y2FyZCkgLSAx KTsKKworCWlmIChkZXYtPmRybV9yZW5kZXIgIT0gTlVMTCkKKwkJc3RybmNweShjYXJkLT5yZW5k ZXIsIGRldi0+ZHJtX3JlbmRlciwKKwkJCSAgICAgc2l6ZW9mKGNhcmQtPnJlbmRlcikgLSAxKTsK KworCXJldHVybiB0cnVlOworfQorCisvKioKKyAqIGlndF9vcGVuX2NhcmQ6CisgKiBAY2FyZDog cG9pbnRlciB0byBpZ3RfZGV2aWNlX2NhcmQgc3RydWN0dXJlCisgKgorICogT3BlbiAvZGV2L2Ry aS9jYXJkWCBkZXZpY2UgcmVwcmVzZW50ZWQgYnkgaWd0X2RldmljZV9jYXJkIHN0cnVjdHVyZS4K KyAqIFJlcXVpcmVzIGZpbGxlZCBAY2FyZCBhcmd1bWVudCAoc2VlIGlndF9kZXZpY2VfY2FyZF9t YXRjaCgpIGZ1bmN0aW9uKS4KKyAqCisgKiBBbiBvcGVuIERSTSBmZCBvciAtMSBvbiBlcnJvcgor ICovCitpbnQgaWd0X29wZW5fY2FyZChzdHJ1Y3QgaWd0X2RldmljZV9jYXJkICpjYXJkKQorewor CWlmICghY2FyZCB8fCAhc3RybGVuKGNhcmQtPmNhcmQpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1 cm4gb3BlbihjYXJkLT5jYXJkLCBPX1JEV1IpOworfQorCisvKioKKyAqIGlndF9vcGVuX3JlbmRl cjoKKyAqIEBjYXJkOiBwb2ludGVyIHRvIGlndF9kZXZpY2VfY2FyZCBzdHJ1Y3R1cmUKKyAqCisg KiBPcGVuIC9kZXYvZHJpL3JlbmRlckRYIGRldmljZSByZXByZXNlbnRlZCBieSBpZ3RfZGV2aWNl X2NhcmQgc3RydWN0dXJlLgorICogUmVxdWlyZXMgZmlsbGVkIEBjYXJkIGFyZ3VtZW50IChzZWUg aWd0X2RldmljZV9jYXJkX21hdGNoKCkgZnVuY3Rpb24pLgorICoKKyAqIEFuIG9wZW4gRFJNIGZk IG9yIC0xIG9uIGVycm9yCisgKi8KK2ludCBpZ3Rfb3Blbl9yZW5kZXIoc3RydWN0IGlndF9kZXZp Y2VfY2FyZCAqY2FyZCkKK3sKKwlpZiAoIWNhcmQgfHwgIXN0cmxlbihjYXJkLT5yZW5kZXIpKQor CQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gb3BlbihjYXJkLT5yZW5kZXIsIE9fUkRXUik7Cit9CmRp ZmYgLS1naXQgYS9saWIvaWd0X2RldmljZV9zY2FuLmggYi9saWIvaWd0X2RldmljZV9zY2FuLmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmRiZGU4ODE2Ci0tLSAvZGV2L251 bGwKKysrIGIvbGliL2lndF9kZXZpY2Vfc2Nhbi5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBD b3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh CisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0 cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Ymxp Y2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBz bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3Zl IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0 aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNP RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs IEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBU SEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElO R1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0lHVF9ERVZJQ0Vf U0NBTl9IX18KKyNkZWZpbmUgX19JR1RfREVWSUNFX1NDQU5fSF9fCisKKyNpbmNsdWRlIDxsaW1p dHMuaD4KKyNpbmNsdWRlIDxpZ3QuaD4KKworZW51bSBpZ3RfZGV2aWNlc19wcmludF90eXBlIHsK KwlJR1RfUFJJTlRfU0lNUExFLAorCUlHVF9QUklOVF9ERVRBSUwsCit9OworCitzdHJ1Y3QgaWd0 X2RldmljZV9jYXJkIHsKKwljaGFyIHN1YnN5c3RlbVtOQU1FX01BWF07CisJY2hhciBjYXJkW05B TUVfTUFYXTsKKwljaGFyIHJlbmRlcltOQU1FX01BWF07Cit9OworCisvKiBTY2FuIHVkZXYgc3Vi c3lzdGVtcy4gRG8gaXQgb25jZSB1bmxlc3MgZm9yY2UgaXMgdHJ1ZSwgd2hhdCByZXNjYW5zCisg KiBkZXZpY2VzIGFnYWluLgorICovCit2b2lkIGlndF9kZXZpY2VzX3NjYW4oYm9vbCBmb3JjZSk7 CisKK3ZvaWQgaWd0X2RldmljZXNfcHJpbnQoZW51bSBpZ3RfZGV2aWNlc19wcmludF90eXBlIHBy aW50dHlwZSk7Cit2b2lkIGlndF9kZXZpY2VzX3ByaW50X3ZlbmRvcnModm9pZCk7Cit2b2lkIGln dF9kZXZpY2VfcHJpbnRfZmlsdGVyX3R5cGVzKHZvaWQpOworCisvKgorICogSGFuZGxlIGRldmlj ZSBmaWx0ZXIgY29sbGVjdGlvbiBhcnJheS4KKyAqIElHVCBjYW4gc3RvcmUvcmV0cmlldmUgZmls dGVycyBwYXNzZWQgYnkgdXNlciB1c2luZyAnLS1kZXZpY2UnIGFyZ3MuCisgKi8KKworYm9vbCBp Z3RfZGV2aWNlX2lzX2ZpbHRlcl9zZXQodm9pZCk7Cit2b2lkIGlndF9kZXZpY2VfZmlsdGVyX3Nl dChjb25zdCBjaGFyICpmaWx0ZXIpOwordm9pZCBpZ3RfZGV2aWNlX2ZpbHRlcl9mcmVlKHZvaWQp OworY29uc3QgY2hhciAqaWd0X2RldmljZV9maWx0ZXJfZ2V0KHZvaWQpOworCisvKiBVc2UgZmls dGVyIHRvIG1hdGNoIHRoZSBkZXZpY2UgYW5kIGZpbGwgY2FyZCBzdHJ1Y3R1cmUgKi8KK2Jvb2wg aWd0X2RldmljZV9jYXJkX21hdGNoKGNvbnN0IGNoYXIgKmZpbHRlciwgc3RydWN0IGlndF9kZXZp Y2VfY2FyZCAqY2FyZCk7CisKK2ludCBpZ3Rfb3Blbl9jYXJkKHN0cnVjdCBpZ3RfZGV2aWNlX2Nh cmQgKmNhcmQpOworaW50IGlndF9vcGVuX3JlbmRlcihzdHJ1Y3QgaWd0X2RldmljZV9jYXJkICpj YXJkKTsKKworI2VuZGlmIC8qIF9fSUdUX0RFVklDRV9TQ0FOX0hfXyAqLwpkaWZmIC0tZ2l0IGEv bGliL21lc29uLmJ1aWxkIGIvbGliL21lc29uLmJ1aWxkCmluZGV4IDE5Y2I2MjU1Li40ODZmNTFk NyAxMDA2NDQKLS0tIGEvbGliL21lc29uLmJ1aWxkCisrKyBiL2xpYi9tZXNvbi5idWlsZApAQCAt MTAsNiArMTAsNyBAQCBsaWJfc291cmNlcyA9IFsKIAknaWd0X2NvbG9yX2VuY29kaW5nLmMnLAog CSdpZ3RfZGVidWdmcy5jJywKIAknaWd0X2RldmljZS5jJywKKwknaWd0X2RldmljZV9zY2FuLmMn LAogCSdpZ3RfYXV4LmMnLAogCSdpZ3RfZ3QuYycsCiAJJ2lndF9ndnQuYycsCi0tIAoyLjIxLjAK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYg bWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==