From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id 321CF893EC for ; Mon, 2 Dec 2019 12:25:25 +0000 (UTC) From: Arkadiusz Hiler Date: Mon, 2 Dec 2019 14:25:01 +0200 Message-ID: <20191202122503.146142-1-arkadiusz.hiler@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 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: Petri Latvala List-ID: RnJvbTogWmJpZ25pZXcgS2VtcGN6ecWEc2tpIDx6Ymlnbmlldy5rZW1wY3p5bnNraUBpbnRlbC5j b20+CgpUaGUgbmV3IGRldmljZSBzZWxlY3Rpb24gQVBJIGJhc2VkIG9uIHNjYW5uaW5nIERSTSBz dWJzeXN0ZW0gdXNpbmcgdWRldi4KCkl0IHByb3ZpZGVzIGEgc2V0IG9mIGZ1bmN0aW9ucyBmb3Ig ZW51bWVyYXRpbmcgYW5kIGZpbHRlcmluZyBhdmFpbGFibGUKZ3JhcGhpYyBjYXJkcyB0byBnZXQg dGhlIGNvcnJlc3BvbmRpbmcgL2Rldi9kcmkgbm9kZXMuCgpGb3IgZGV0YWlscyBjaGVjayB0aGUg dG9wIGxldmVsIGRvY3VtZW50YXRpb24gaW4gaWd0X2RldmljZV9zY2FuLmMKClRvIGJlIHVzZWQg aW4gbHNncHUgdG9vbCBhbmQgaW50ZXJuYWxseSBieSBkcm1fb3Blbl9kcml2ZXIqKCkgZnVuY3Rp b25zCihzZWUgdGhlIGZvbGxvd2luZyBwYXRjaGVzKS4KCnYyIChBcmVrKToKICogZHJvcCBtb3N0 IG9mIHRoZSBnbGliIGNvZGUgaW4gZmF2b3Igb2YgaWd0X2xpc3QgYW5kIHBsYWluIEMKICogbWFr ZSBzeXNmcyBwYXRocyBoYW5kbGluZyBub24tc3BlY2lhbCAtIGludHJvZHVjZSBzeXM6IGZpbHRl cgogKiBkcm9wIG11bHRpcGxlIGZpbHRlcl8qIHN0cnVjdHMgaW4gZmF2b3Igb2YganVzdCB0d286 CiAgIC0gZmlsdGVyX2NsYXNzIGZvciBkZWZpbmluZyBmaWx0ZXJzIHR5cGVzIChlLmcuIHN5czop CiAgIC0gZmlsdGVyIGZvciAiZmlsdGVyIGluc3RhbmNlIiAtIHRoZSBkYXRhIHByb3ZpZGVkIGJ5 IHRoZSB1c2VyCiAqIHByb21vdGUgbWFueSBtYWNyb3MgdG8gcmVhbCBmdW5jdGlvbnMgZm9yIHR5 cGUgc2FmZXR5CiAqIHJlbmFtZSBkZXZzLT5kZXZzIHRvIGRldnMtPmFsbAogKiByZW5hbWUgZGV2 cy0+dmlldyB0byBkZXZzLT5maWx0ZXJlZAogKiBkb24ndCBleHBvc2UgImNoaXAiIChlLmcuIERS SVZFUl9BTlkpIGFzIGl0J3MgdW5yZWFkYWJsZSBhcyBpbnQKICogdXBkYXRlIGRvY3MgdG8gcmVm bGVjdCB0aG9zZSBjaGFuZ2VzCiAqIG1vdmUgb3BlbiBmdW5jdGlvbnMgdGhhdCBvcGVuIGlndF9k ZXZpY2VfY2FyZCB0byB0aGlzIHBhdGNoCiAqIHJlbW92ZSBwbGF0Zm9ybSBmaWx0ZXIgY2xhc3Mg Zm9yIG5vdwogKiB1c2Ugb25seSBhIHNpbmdsZSBmaWx0ZXIKCnYzIChBcmVrKToKICogZml4IHNv bWUgbWVtb3J5IGxlYWtzIGFuZCBzZXR0aW5nIHRvIE5VTEwgYWZ0ZXIgZnJlZSgpIChaYmlnbmll dykKICogZml4IGV2ZW4gbW9yZSBtaXNzaW5nIGZyZWUoKSAoUGV0cmkpCiAqIHVzZSB0aGUgbmV3 IGlndF9saXN0IEFQSQogKiBmaXggbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIG9uIGZpbHRlci0+ Y2xhc3MKCkNjOiBQZXRyaSBMYXR2YWxhIDxwZXRyaS5sYXR2YWxhQGludGVsLmNvbT4KU2lnbmVk LW9mZi1ieTogWmJpZ25pZXcgS2VtcGN6ecWEc2tpIDx6Ymlnbmlldy5rZW1wY3p5bnNraUBpbnRl bC5jb20+ClNpZ25lZC1vZmYtYnk6IEFya2FkaXVzeiBIaWxlciA8YXJrYWRpdXN6LmhpbGVyQGlu dGVsLmNvbT4KUmV2aWV3ZWQtYnk6IFBldHJpIExhdHZhbGEgPHBldHJpLmxhdHZhbGFAaW50ZWwu Y29tPgotLS0KIC4uLi9pZ3QtZ3B1LXRvb2xzL2lndC1ncHUtdG9vbHMtZG9jcy54bWwgICAgICB8 ICAgIDEgKwogbGliL01ha2VmaWxlLnNvdXJjZXMgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAgMiArCiBsaWIvaWd0X2RldmljZV9zY2FuLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAx MjAzICsrKysrKysrKysrKysrKysrCiBsaWIvaWd0X2RldmljZV9zY2FuLmggICAgICAgICAgICAg ICAgICAgICAgICAgfCAgIDY0ICsKIGxpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgIDEgKwogNSBmaWxlcyBjaGFuZ2VkLCAxMjcxIGluc2VydGlvbnMoKykK IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaWd0X2RldmljZV9zY2FuLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBsaWIvaWd0X2RldmljZV9zY2FuLmgKCmRpZmYgLS1naXQgYS9kb2NzL3JlZmVyZW5jZS9p Z3QtZ3B1LXRvb2xzL2lndC1ncHUtdG9vbHMtZG9jcy54bWwgYi9kb2NzL3JlZmVyZW5jZS9pZ3Qt Z3B1LXRvb2xzL2lndC1ncHUtdG9vbHMtZG9jcy54bWwKaW5kZXggMmVkYjRhZGYuLjQ1NGQ2NGU1 IDEwMDY0NAotLS0gYS9kb2NzL3JlZmVyZW5jZS9pZ3QtZ3B1LXRvb2xzL2lndC1ncHUtdG9vbHMt ZG9jcy54bWwKKysrIGIvZG9jcy9yZWZlcmVuY2UvaWd0LWdwdS10b29scy9pZ3QtZ3B1LXRvb2xz LWRvY3MueG1sCkBAIC0yMyw2ICsyMyw3IEBACiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2ln dF9jb3JlLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9pZ3RfZGVidWdmcy54bWwi Lz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvaWd0X2RldmljZS54bWwiLz4KKyAgICA8eGk6 aW5jbHVkZSBocmVmPSJ4bWwvaWd0X2RldmljZV9zY2FuLnhtbCIvPgogICAgIDx4aTppbmNsdWRl IGhyZWY9InhtbC9pZ3RfZHJhdy54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvaWd0 X2R1bW15bG9hZC54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvaWd0X2ZiLnhtbCIv PgpkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLnNvdXJjZXMgYi9saWIvTWFrZWZpbGUuc291cmNl cwppbmRleCA5ZDFhNGUwNi4uNzUwZTYzMGIgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZS5zb3Vy Y2VzCisrKyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCkBAIC0yNSw2ICsyNSw4IEBAIGxpYl9zb3Vy Y2VfbGlzdCA9CSAJXAogCWlndF9kZWJ1Z2ZzLmgJCVwKIAlpZ3RfZGV2aWNlLmMJCVwKIAlpZ3Rf ZGV2aWNlLmgJCVwKKwlpZ3RfZGV2aWNlX3NjYW4uYwlcCisJaWd0X2RldmljZV9zY2FuLmgJXAog CWlndF9hdXguYwkJXAogCWlndF9hdXguaAkJXAogCWlndF9jb2xvcl9lbmNvZGluZy5jCVwKZGlm ZiAtLWdpdCBhL2xpYi9pZ3RfZGV2aWNlX3NjYW4uYyBiL2xpYi9pZ3RfZGV2aWNlX3NjYW4uYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uYjNmNzljODEKLS0tIC9kZXYvbnVs bAorKysgYi9saWIvaWd0X2RldmljZV9zY2FuLmMKQEAgLTAsMCArMSwxMjAzIEBACisvKgorICog Q29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg YQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdo dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBl cm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcg dGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E LCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI RSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICog VEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s IERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJ TkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRlICJpZ3QuaCIKKyNp bmNsdWRlICJpZ3RfbGlzdC5oIgorI2luY2x1ZGUgImlndF9zeXNmcy5oIgorI2luY2x1ZGUgImln dF9kZXZpY2UuaCIKKyNpbmNsdWRlICJpZ3RfZGV2aWNlX3NjYW4uaCIKKyNpbmNsdWRlIDxnbGli Lmg+CisjaW5jbHVkZSA8bGlidWRldi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgorI2lu Y2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZGly ZW50Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworLyoqCisgKiBTRUNUSU9OOmlndF9kZXZpY2Vf c2NhbgorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBEZXZpY2Ugc2Nhbm5pbmcgYW5kIHNlbGVjdGlv bgorICogQHRpdGxlOiBEZXZpY2Ugc2VsZWN0aW9uCisgKiBAaW5jbHVkZTogaWd0LmgKKyAqCisg KiAjIERldmljZSBzY2FubmluZworICoKKyAqIERldmljZSBzY2FubmluZyBpdGVyYXRlcyBvdmVy IERSTSBzdWJzeXN0ZW0gdXNpbmcgdWRldiBsaWJyYXJ5CisgKiB0byBhY3F1aXJlIERSTSBkZXZp Y2VzLgorICogRm9yIGVhY2ggRFJNIGRldmljZSB3ZSBhbHNvIGdldCBhbmQgc3RvcmUgaXRzIHBh cmVudCB0byBhbGxvdyBkZXZpY2UKKyAqIHNlbGVjdGlvbiBoYXBwZW4gaW4gYSBtb3JlIGNvbnRl eHR1YWwgd2F5LgorICoKKyAqIFBhcmVudCBkZXZpY2VzIGFyZSBidXMgZGV2aWNlcyAobGlrZSBQ Q0ksIHBsYXRmb3JtLCBldGMuKSBhbmQgY29udGFpbiBhIGxvdAorICogb2YgZXh0cmEgZGF0YSBv biB0b3Agb2YgdGhlIERSTSBkZXZpY2UgaXRzZWxmLgorICoKKyAqICMgRmlsdGVycworICoKKyAq IERldmljZSBzZWxlY3Rpb24gY2FuIGJlIGRvbmUgdXNpbmcgZmlsdGVycyB0aGF0IGFyZSB1c2lu ZyB0aGUgZGF0YSBjb2xsZWN0ZWQKKyAqIHVkZXYgKyBzb21lIHN5bnRhY3RpYyBzdWdhci4KKyAq CisgKiBEaXJlY3QgZGV2aWNlIHNlbGVjdGlvbiBmaWx0ZXIgdXNlcyBzeXNmcyBwYXRoIHRvIGZp bmQgdGhlIGRldmljZToKKyAqCisgKiB8WzwhLS0gbGFuZ3VhZ2U9InBsYWluIiAtLT4KKyAqIHN5 czovc3lzL3BhdGgvdG8vZGV2aWNlL29yL3BhcmVudAorICogXXwKKyAqCisgKiBFeGFtcGxlczoK KyAqIHxbPCEtLSBsYW5ndWFnZT0icGxhaW4iIC0tPgorICogLSBzeXM6L3N5cy9kZXZpY2VzL3Bj aTAwMDA6MDAvMDAwMDowMDowMi4wL2RybS9jYXJkMAorICogLSBzeXM6L3N5cy9kZXZpY2VzL3Bj aTAwMDA6MDAvMDAwMDowMDowMi4wCisgKiAtIHN5czovc3lzL2RldmljZXMvcGxhdGZvcm0vdmdl bQorICogXXwKKyAqCisgKiBUaGUgYWx0ZXJuYXRpdmUgaXMgdG8gdXNlIG90aGVyIGltcGxlbWVu dGVkIGZpbHRlcnM6CisgKgorICogLSBkcm06IGdldCBkcm0gL2Rldi9kcmkvLi4uIGRldmljZSBk aXJlY3RseQorICoKKyAqICAgfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIgLS0+CisgKiAgIGRybTov ZGV2L2RyaS8uLi4KKyAqICAgXXwKKyAqCisgKiAgIExvYWRpbmcgZHJpdmVycyBpbiBkaWZmZXJl bnQgb3JkZXIgY2FuIGNhdXNlIGRpZmZlcmVudCBvcmRlcmluZyBvZgorICogICAvZGV2L2RyaS9j YXJkIG5vZGVzIHdoaWNoIGJlIHByb2JsZW1hdGljIGZvciByZWxpYWJsZSBhbmQgcmVwcm9kdWNp YmxlCisgKiAgIGRldmljZSBzZWxlY3Rpb24sIGUuZy4gaW4gYXV0b21hdGVkIGV4ZWN1dGlvbiBz ZXR0aW5nLiBJbiBzdWNoIHNjZW5hcmlvcworICogICBwbGVhc2UgY29uc2lkZXIgdXNpbmcgc3lz LCBwY2kgb3IgcGxhdGZvcm0gZmlsdGVycyBpbnN0ZWFkLgorICoKKyAqIC0gcGNpOiBzZWxlY3Qg ZGV2aWNlIHVzaW5nIFBDSSB2ZW5kb3IgYW5kIGRldmljZSBwcm9wZXJ0aWVzCisgKiAgIHxbPCEt LSBsYW5ndWFnZT0icGxhaW4iIC0tPgorICogICBwY2k6W3ZlbmRvcj0lMDR4L25hbWVdWyxkZXZp Y2U9JTA0eF1bLGNhcmQ9JWRdCisgKiAgIF18CisgKgorICogICBGaWx0ZXIgYWxsb3dzIGRldmlj ZSBzZWxlY3Rpb24gdXNpbmcgdmVuZG9yIChoZXggb3IgbmFtZSksIGRldmljZSBpZAorICogICAo aGV4KSBhbmQgbnRoLWNhcmQgZnJvbSBhbGwgbWF0Y2hlcy4gRm9yIGV4YW1wbGUgaWYgdGhlcmUg YXJlIDQgUENJIGNhcmRzCisgKiAgIGluc3RhbGxlZCAobGV0IHR3byBjYXJkcyBoYXZlIDEyMzQg YW5kIG90aGVyIHR3byAxMjM1IGRldmljZSBpZCwgYWxsIG9mCisgKiAgIHRoZW0gb2YgdmVuZG9y IEludGVsKSB5b3UgY2FuIHNlbGVjdCBvbmUgdXNpbmc6CisgKgorICogICB8WzwhLS0gbGFuZ3Vh Z2U9InBsYWluIiAtLT4KKyAqICAgcGNpOnZlbmRvcj1JbnRlbCxkZXZpY2U9MTIzNCxjYXJkPTAK KyAqICAgXXwKKyAqCisgKiAgIG9yCisgKgorICogICB8WzwhLS0gbGFuZ3VhZ2U9InBsYWluIiAt LT4KKyAqICAgcGNpOnZlbmRvcj04MDg2LGRldmljZT0xMjM0LGNhcmQ9MAorICogICBdfAorICoK KyAqICAgVGhpcyB0YWtlcyBmaXJzdCBkZXZpY2Ugd2l0aCAxMjM0IGlkIGZvciBJbnRlbCB2ZW5k b3IgKDgwODYpLgorICoKKyAqICAgfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIgLS0+CisgKiAgIHBj aTp2ZW5kb3I9SW50ZWwsZGV2aWNlPTEyMzQsY2FyZD0xCisgKiAgIF18CisgKgorICogICBvcgor ICoKKyAqICAgfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIgLS0+CisgKiAgIHBjaTp2ZW5kb3I9ODA4 NixkZXZpY2U9MTIzNCxjYXJkPTEKKyAqICAgXXwKKyAqCisgKiAgIEl0IHNlbGVjdHMgdGhlIHNl Y29uZCBvbmUuCisgKgorICogICBBcyBvcmRlciB0aGUgb24gUENJIGJ1cyBkb2Vzbid0IGNoYW5n ZSAodW5sZXNzIHlvdSdsbCBhZGQgbmV3IGRldmljZSBvcgorICogICByZW9yZGVyIGV4aXN0aW5n IG9uZSkgZGV2aWNlIHNlbGVjdGlvbiB1c2luZyB0aGlzIGZpbHRlciB3aWxsIGFsd2F5cworICog ICByZXR1cm4geW91IHNhbWUgZGV2aWNlIHJlZ2FyZGxlc3MgdGhlIG9yZGVyIG9mIGVudW1lcmF0 aW9uLgorICoKKyAqICAgU2ltcGxlIHN5bnRhY3RpYyBzdWdhciBvdmVyIHVzaW5nIHRoZSBzeXNm cyBwYXRocy4KKyAqLworCisjaWZkZWYgREVCVUdfREVWSUNFX1NDQU4KKyNkZWZpbmUgREJHKC4u LikgXAoreyBcCisJc3RydWN0IHRpbWV2YWwgdG07IFwKKwlnZXR0aW1lb2ZkYXkoJnRtLCBOVUxM KTsgXAorCXByaW50ZigiJTEwbGQuJTAzbGQ6ICIsIHRtLnR2X3NlYywgdG0udHZfdXNlYyk7IFwK KwlwcmludGYoX19WQV9BUkdTX18pOyBcCit9CisKKyNlbHNlCisjZGVmaW5lIERCRyguLi4pIHt9 CisjZW5kaWYKKworc3RhdGljIGlubGluZSBib29sIHN0cmVxdWFsKGNvbnN0IGNoYXIgKmEsIGNv bnN0IGNoYXIgKmIpCit7CisJaWYgKGEgPT0gTlVMTCB8fCBiID09IE5VTEwpCisJCXJldHVybiBm YWxzZTsKKworCXJldHVybiBzdHJjbXAoYSwgYikgPT0gMDsKK30KKworc3RydWN0IGlndF9kZXZp Y2UgeworCS8qIEZpbGxlZCBmb3IgZHJtIGRldmljZXMgKi8KKwlzdHJ1Y3QgaWd0X2RldmljZSAq cGFyZW50OworCisJLyogUG9pbnQgdG8gdmVuZG9yIHNwZWMgaWYgY2FuIGJlIGZvdW5kICovCisK KwkvKiBQcm9wZXJ0aWVzIC8gc3lzYXR0cnMgcmV3cml0ZW4gZnJvbSB1ZGV2IGxpc3RzICovCisJ R0hhc2hUYWJsZSAqcHJvcHNfaHQ7CisJR0hhc2hUYWJsZSAqYXR0cnNfaHQ7CisKKwkvKiBNb3N0 IHVzYWJsZSB2YXJpYWJsZXMgZnJvbSB1ZGV2IGRldmljZSAqLworCWNoYXIgKnN1YnN5c3RlbTsK KwljaGFyICpzeXNwYXRoOworCWNoYXIgKmRldm5vZGU7CisKKwkvKiAvZGV2L2RyaS8uLi4gcGF0 aHMgKi8KKwljaGFyICpkcm1fY2FyZDsKKwljaGFyICpkcm1fcmVuZGVyOworCisJLyogRm9yIHBj aSBzdWJzeXN0ZW0gKi8KKwljaGFyICp2ZW5kb3I7CisJY2hhciAqZGV2aWNlOworCisJc3RydWN0 IGlndF9saXN0X2hlYWQgbGluazsKK307CisKKy8qIFNjYW5uZWQgZGV2aWNlcyAqLworc3RhdGlj IHN0cnVjdCB7CisJc3RydWN0IGlndF9saXN0X2hlYWQgYWxsOworCXN0cnVjdCBpZ3RfbGlzdF9o ZWFkIGZpbHRlcmVkOworCWJvb2wgZGV2c19zY2FubmVkOworfSBpZ3RfZGV2czsKKworc3RhdGlj IHN0cnVjdCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICp2ZW5kb3JfaWQ7Cit9 IHBjaV92ZW5kb3JfbWFwcGluZ1tdID0geworCXsgImludGVsIiwgIjgwODYiIH0sCisJeyAiYW1k IiwgIjEwMDIiIH0sCisJeyBOVUxMLCB9LAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9w Y2lfdmVuZG9yX2lkX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlmb3IgKHR5cGVvZigq cGNpX3ZlbmRvcl9tYXBwaW5nKSAqdm0gPSBwY2lfdmVuZG9yX21hcHBpbmc7IHZtLT5uYW1lOyB2 bSsrKQorCXsKKwkJaWYgKCFzdHJjYXNlY21wKG5hbWUsIHZtLT5uYW1lKSkKKwkJCXJldHVybiB2 bS0+dmVuZG9yX2lkOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKiBSZWFkaW5nIHN5c2F0 dHIgdmFsdWVzIGNhbiB0YWtlIHRpbWUgKGV2ZW4gc2Vjb25kcyksCisgKiB3ZSB3YW50IHRvIGF2 b2lkIHJlYWRpbmcgc3VjaCBrZXlzLgorICovCitzdGF0aWMgYm9vbCBpc19vbl9ibGFja2xpc3Qo Y29uc3QgY2hhciAqd2hhdCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqa2V5c1tdID0geyAiY29u ZmlnIiwgIm1vZGFsaWFzIiwgIm1vZGVzIiwKKwkJCQkgICAgICAicmVzb3VyY2UiLAorCQkJCSAg ICAgICJyZXNvdXJjZTAiLCAicmVzb3VyY2UxIiwgInJlc291cmNlMiIsCisJCQkJICAgICAgInJl c291cmNlMyIsICJyZXNvdXJjZTQiLCAicmVzb3VyY2U1IiwKKwkJCQkgICAgICAicmVzb3VyY2Uw X3djIiwgInJlc291cmNlMV93YyIsICJyZXNvdXJjZTJfd2MiLAorCQkJCSAgICAgICJyZXNvdXJj ZTNfd2MiLCAicmVzb3VyY2U0X3djIiwgInJlc291cmNlNV93YyIsCisJCQkJICAgICAgImRyaXZl ciIsCisJCQkJICAgICAgInVldmVudCIsIE5VTEx9OworCWNvbnN0IGNoYXIgKmtleTsKKwlpbnQg aSA9IDA7CisKKwlpZiAod2hhdCA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisKKwl3aGlsZSAo KGtleSA9IGtleXNbaSsrXSkpIHsKKwkJaWYgKHN0cmNtcChrZXksIHdoYXQpID09IDApCisJCQly ZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7CisKK30KKworc3RhdGljIHN0cnVjdCBp Z3RfZGV2aWNlICppZ3RfZGV2aWNlX25ldyh2b2lkKQoreworCXN0cnVjdCBpZ3RfZGV2aWNlICpk ZXY7CisKKwlkZXYgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBpZ3RfZGV2aWNlKSk7CisJaWYg KCFkZXYpCisJCXJldHVybiBOVUxMOworCisJZGV2LT5hdHRyc19odCA9IGdfaGFzaF90YWJsZV9u ZXdfZnVsbChnX3N0cl9oYXNoLCBnX3N0cl9lcXVhbCwKKwkJCQkJICAgICAgZnJlZSwgZnJlZSk7 CisJZGV2LT5wcm9wc19odCA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbChnX3N0cl9oYXNoLCBnX3N0 cl9lcXVhbCwKKwkJCQkJICAgICAgZnJlZSwgZnJlZSk7CisKKwlpZiAoZGV2LT5hdHRyc19odCAm JiBkZXYtPnByb3BzX2h0KQorCQlyZXR1cm4gZGV2OworCisJZnJlZShkZXYpOworCisJcmV0dXJu IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGlndF9kZXZpY2VfYWRkX3Byb3Aoc3RydWN0IGlndF9k ZXZpY2UgKmRldiwKKwkJCQljb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlKQorewor CWlmICgha2V5IHx8ICF2YWx1ZSkKKwkJcmV0dXJuOworCisJZ19oYXNoX3RhYmxlX2luc2VydChk ZXYtPnByb3BzX2h0LCBzdHJkdXAoa2V5KSwgc3RyZHVwKHZhbHVlKSk7Cit9CisKK3N0YXRpYyB2 b2lkIGlndF9kZXZpY2VfYWRkX2F0dHIoc3RydWN0IGlndF9kZXZpY2UgKmRldiwKKwkJCQljb25z dCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWNvbnN0IGNoYXIgKnYgPSB2YWx1 ZTsKKworCWlmICgha2V5KQorCQlyZXR1cm47CisKKwkvKiBJdCdzIHBvc3NpYmxlIHdlIGhhdmUg c3ltbGluayBhdCBrZXkgZmlsZW5hbWUsIGJ1dCB1ZGV2CisJICogbGlicmFyeSByZXNvbHZlcyBv bmx5IGZldyBvZiB0aGVtCisJICovCisJaWYgKCF2KSB7CisJCXN0cnVjdCBzdGF0IHN0OworCQlj aGFyIHBhdGhbUEFUSF9NQVhdOworCQljaGFyIGxpbmt0b1tQQVRIX01BWF07CisJCWludCBsZW47 CisKKwkJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJXMvJXMiLCBkZXYtPnN5c3BhdGgs IGtleSk7CisJCWlmIChsc3RhdChwYXRoLCAmc3QpICE9IDApCisJCQlyZXR1cm47CisKKwkJbGVu ID0gcmVhZGxpbmsocGF0aCwgbGlua3RvLCBzaXplb2YobGlua3RvKSk7CisJCWlmIChsZW4gPD0g MCB8fCBsZW4gPT0gKHNzaXplX3QpIHNpemVvZihsaW5rdG8pKQorCQkJcmV0dXJuOworCQlsaW5r dG9bbGVuXSA9ICdcMCc7CisJCXYgPSBzdHJyY2hyKGxpbmt0bywgJy8nKTsKKwkJaWYgKHYgPT0g TlVMTCkKKwkJCXJldHVybjsKKwkJdisrOworCX0KKworCWdfaGFzaF90YWJsZV9pbnNlcnQoZGV2 LT5hdHRyc19odCwgc3RyZHVwKGtleSksIHN0cmR1cCh2KSk7Cit9CisKKy8qIEl0ZXJhdGUgb3Zl ciB1ZGV2IHByb3BlcnRpZXMgbGlzdCBhbmQgcmV3cml0ZSBpdCB0byBpZ3RfZGV2aWNlIHByb3Bl cnRpZXMKKyAqIGhhc2ggdGFibGUgZm9yIGluc3RhbnQgYWNjZXNzLgorICovCitzdGF0aWMgdm9p ZCBnZXRfcHJvcHMoc3RydWN0IHVkZXZfZGV2aWNlICpkZXYsIHN0cnVjdCBpZ3RfZGV2aWNlICpp ZGV2KQoreworCXN0cnVjdCB1ZGV2X2xpc3RfZW50cnkgKmVudHJ5OworCisJZW50cnkgPSB1ZGV2 X2RldmljZV9nZXRfcHJvcGVydGllc19saXN0X2VudHJ5KGRldik7CisJd2hpbGUgKGVudHJ5KSB7 CisJCWNvbnN0IGNoYXIgKm5hbWUgPSB1ZGV2X2xpc3RfZW50cnlfZ2V0X25hbWUoZW50cnkpOwor CQljb25zdCBjaGFyICp2YWx1ZSA9IHVkZXZfbGlzdF9lbnRyeV9nZXRfdmFsdWUoZW50cnkpOwor CisJCWlndF9kZXZpY2VfYWRkX3Byb3AoaWRldiwgbmFtZSwgdmFsdWUpOworCQllbnRyeSA9IHVk ZXZfbGlzdF9lbnRyeV9nZXRfbmV4dChlbnRyeSk7CisJCURCRygicHJvcDogJXMsIHZhbDogJXNc biIsIG5hbWUsIHZhbHVlKTsKKwl9Cit9CisKKy8qIFNhbWUgYXMgZ2V0X3Byb3BzKCksIGJ1dCBy ZXdyaXRlcyBzeXNhdHRycy4gUmVzb2x2ZXMgc3ltYm9saWMgbGlua3MKKyAqIG5vdCBoYW5kbGVk IGJ5IHVkZXYgZ2V0X3N5c2F0dHJfdmFsdWUoKS4KKyAqIEZ1bmN0aW9uIHNraXBzIHN5c2F0dHJz IGZyb20gYmxhY2tsaXN0IGh0IChhY3F1aXJpbmcgc29tZSB2YWx1ZXMgY2FuIHRha2UKKyAqIHNl Y29uZHMpLgorICovCitzdGF0aWMgdm9pZCBnZXRfYXR0cnMoc3RydWN0IHVkZXZfZGV2aWNlICpk ZXYsIHN0cnVjdCBpZ3RfZGV2aWNlICppZGV2KQoreworCXN0cnVjdCB1ZGV2X2xpc3RfZW50cnkg KmVudHJ5OworCisJZW50cnkgPSB1ZGV2X2RldmljZV9nZXRfc3lzYXR0cl9saXN0X2VudHJ5KGRl dik7CisJd2hpbGUgKGVudHJ5KSB7CisJCWNvbnN0IGNoYXIgKmtleSA9IHVkZXZfbGlzdF9lbnRy eV9nZXRfbmFtZShlbnRyeSk7CisJCWNvbnN0IGNoYXIgKnZhbHVlOworCisJCWlmIChpc19vbl9i bGFja2xpc3Qoa2V5KSkgeworCQkJZW50cnkgPSB1ZGV2X2xpc3RfZW50cnlfZ2V0X25leHQoZW50 cnkpOworCQkJY29udGludWU7CisJCX0KKworCQl2YWx1ZSA9IHVkZXZfZGV2aWNlX2dldF9zeXNh dHRyX3ZhbHVlKGRldiwga2V5KTsKKwkJaWd0X2RldmljZV9hZGRfYXR0cihpZGV2LCBrZXksIHZh bHVlKTsKKwkJZW50cnkgPSB1ZGV2X2xpc3RfZW50cnlfZ2V0X25leHQoZW50cnkpOworCQlEQkco ImF0dHI6ICVzLCB2YWw6ICVzXG4iLCBrZXksIHZhbHVlKTsKKwl9Cit9CisKKyNkZWZpbmUgZ2V0 X3Byb3AoZGV2LCBwcm9wKSAoKGNoYXIgKikgZ19oYXNoX3RhYmxlX2xvb2t1cChkZXYtPnByb3Bz X2h0LCBwcm9wKSkKKyNkZWZpbmUgZ2V0X2F0dHIoZGV2LCBhdHRyKSAoKGNoYXIgKikgZ19oYXNo X3RhYmxlX2xvb2t1cChkZXYtPmF0dHJzX2h0LCBhdHRyKSkKKyNkZWZpbmUgZ2V0X3Byb3Bfc3Vi c3lzdGVtKGRldikgZ2V0X3Byb3AoZGV2LCAiU1VCU1lTVEVNIikKKyNkZWZpbmUgaXNfZHJtX3N1 YnN5c3RlbShkZXYpICAoc3RyZXF1YWwoZ2V0X3Byb3Bfc3Vic3lzdGVtKGRldiksICJkcm0iKSkK KyNkZWZpbmUgaXNfcGNpX3N1YnN5c3RlbShkZXYpICAoc3RyZXF1YWwoZ2V0X3Byb3Bfc3Vic3lz dGVtKGRldiksICJwY2kiKSkKKworLyogR2V0cyBQQ0lfSUQgcHJvcGVydHksIHNwbGl0cyB0byB4 eHh4Onl5eXkgYW5kIHN0b3JlcworICogeHh4eCB0byBkZXYtPnZlbmRvciBhbmQgeXl5eSB0byBk ZXYtPmRldmljZSBmb3IKKyAqIGZhc3RlciBhY2Nlc3MuCisgKi8KK3N0YXRpYyB2b2lkIHNldF92 ZW5kb3JfZGV2aWNlKHN0cnVjdCBpZ3RfZGV2aWNlICpkZXYpCit7CisJY29uc3QgY2hhciAqcGNp X2lkID0gZ2V0X3Byb3AoZGV2LCAiUENJX0lEIik7CisKKwlpZiAoIXBjaV9pZCB8fCBzdHJsZW4o cGNpX2lkKSAhPSA5KQorCQlyZXR1cm47CisJZGV2LT52ZW5kb3IgPSBzdHJuZHVwKHBjaV9pZCwg NCk7CisJZGV2LT5kZXZpY2UgPSBzdHJuZHVwKHBjaV9pZCArIDUsIDQpOworfQorCisvKiBBbGxv Y2F0ZSBhcnJheXMgZm9yIGtlZXBpbmcgc2Nhbm5lZCBkZXZpY2VzICovCitzdGF0aWMgYm9vbCBw cmVwYXJlX3NjYW4odm9pZCkKK3sKKwlpZiAoaWd0X2RldnMuYWxsLnByZXYgPT0gTlVMTCB8fCBp Z3RfZGV2cy5hbGwubmV4dCA9PSBOVUxMKQorCQlJR1RfSU5JVF9MSVNUX0hFQUQoJmlndF9kZXZz LmFsbCk7CisKKwlpZiAoaWd0X2RldnMuZmlsdGVyZWQucHJldiA9PSBOVUxMIHx8IGlndF9kZXZz LmZpbHRlcmVkLm5leHQgPT0gTlVMTCkKKwkJSUdUX0lOSVRfTElTVF9IRUFEKCZpZ3RfZGV2cy5m aWx0ZXJlZCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGNoYXIqIHN0cmR1cF9udWxs c2FmZShjb25zdCBjaGFyKiBzdHIpCit7CisJaWYgKHN0ciA9PSBOVUxMKQorCQlyZXR1cm4gTlVM TDsKKworCXJldHVybiBzdHJkdXAoc3RyKTsKK30KKworLyogQ3JlYXRlIG5ldyBpZ3RfZGV2aWNl IGZyb20gdWRldiBkZXZpY2UuCisgKiBGaWxscyBzdHJ1Y3R1cmUgd2l0aCBtb3N0IHVzYWJsZSB1 ZGV2IGRldmljZSB2YXJpYWJsZXMsIHByb3BlcnRpZXMKKyAqIGFuZCBzeXNhdHRycy4KKyAqLwor c3RhdGljIHN0cnVjdCBpZ3RfZGV2aWNlICppZ3RfZGV2aWNlX25ld19mcm9tX3VkZXYoc3RydWN0 IHVkZXZfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGlndF9kZXZpY2UgKmlkZXYgPSBpZ3RfZGV2 aWNlX25ldygpOworCisJaWd0X2Fzc2VydChpZGV2KTsKKwlpZGV2LT5zeXNwYXRoID0gc3RyZHVw X251bGxzYWZlKHVkZXZfZGV2aWNlX2dldF9zeXNwYXRoKGRldikpOworCWlkZXYtPnN1YnN5c3Rl bSA9IHN0cmR1cF9udWxsc2FmZSh1ZGV2X2RldmljZV9nZXRfc3Vic3lzdGVtKGRldikpOworCWlk ZXYtPmRldm5vZGUgPSBzdHJkdXBfbnVsbHNhZmUodWRldl9kZXZpY2VfZ2V0X2Rldm5vZGUoZGV2 KSk7CisKKwlpZiAoaWRldi0+ZGV2bm9kZSAmJiBzdHJzdHIoaWRldi0+ZGV2bm9kZSwgIi9kZXYv ZHJpL2NhcmQiKSkKKwkJaWRldi0+ZHJtX2NhcmQgPSBzdHJkdXAoaWRldi0+ZGV2bm9kZSk7CisJ ZWxzZSBpZiAoaWRldi0+ZGV2bm9kZSAmJiBzdHJzdHIoaWRldi0+ZGV2bm9kZSwgIi9kZXYvZHJp L3JlbmRlciIpKQorCQlpZGV2LT5kcm1fcmVuZGVyID0gc3RyZHVwKGlkZXYtPmRldm5vZGUpOwor CisJZ2V0X3Byb3BzKGRldiwgaWRldik7CisJZ2V0X2F0dHJzKGRldiwgaWRldik7CisKKwlyZXR1 cm4gaWRldjsKK30KKworLyogSXRlcmF0ZSBvdmVyIGFsbCBpZ3RfZGV2aWNlcyBhcnJheSBhbmQg ZmluZCBvbmUgbWF0Y2hlZCB0bworICogc3Vic3lzdGVtIGFuZCBzeXNwYXRoLgorICovCitzdGF0 aWMgc3RydWN0IGlndF9kZXZpY2UgKmlndF9kZXZpY2VfZmluZChjb25zdCBjaGFyICpzdWJzeXN0 ZW0sCisJCQkJCSAgY29uc3QgY2hhciAqc3lzcGF0aCkKK3sKKwlzdHJ1Y3QgaWd0X2RldmljZSAq ZGV2OworCisJaWd0X2xpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmaWd0X2RldnMuYWxsLCBsaW5r KQorCXsKKwkJaWYgKHN0cmNtcChkZXYtPnN1YnN5c3RlbSwgc3Vic3lzdGVtKSA9PSAwICYmCisJ CQlzdHJjbXAoZGV2LT5zeXNwYXRoLCBzeXNwYXRoKSA9PSAwKQorCQkJcmV0dXJuIGRldjsKKwl9 CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBpZ3RfZGV2aWNlICppZ3RfZGV2 aWNlX2Zyb21fc3lzcGF0aChjb25zdCBjaGFyICpzeXNwYXRoKQoreworCXN0cnVjdCBpZ3RfZGV2 aWNlICpkZXY7CisKKwlpZ3RfbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZpZ3RfZGV2cy5hbGws IGxpbmspCisJeworCQlpZiAoc3RyY21wKGRldi0+c3lzcGF0aCwgc3lzcGF0aCkgPT0gMCkKKwkJ CXJldHVybiBkZXY7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIEZvciBlYWNoIGRybSBp Z3RfZGV2aWNlIGFkZCBvciB1cGRhdGUgaXRzIHBhcmVudCBpZ3RfZGV2aWNlIHRvIHRoZSBhcnJh eS4KKyAqIEFzIGNhcmQvcmVuZGVyIGRybSBkZXZpY2VzIG1vc3RseSBoYXZlIHNhbWUgcGFyZW50 ICh2a21zIGlzIGFuIGV4Y2VwdGlvbikKKyAqIGxpbmsgdG8gaXQgYW5kIHVwZGF0ZSBjb3JyZXNw b25kaW5nIGRybV9jYXJkIC8gZHJtX3JlbmRlciBmaWVsZHMuCisgKi8KK3N0YXRpYyB2b2lkIHVw ZGF0ZV9vcl9hZGRfcGFyZW50KHN0cnVjdCB1ZGV2X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3Qg aWd0X2RldmljZSAqaWRldikKK3sKKwlzdHJ1Y3QgdWRldl9kZXZpY2UgKnBhcmVudF9kZXY7CisJ c3RydWN0IGlndF9kZXZpY2UgKnBhcmVudF9pZGV2OworCWNvbnN0IGNoYXIgKnN1YnN5c3RlbSwg KnN5c3BhdGgsICpkZXZuYW1lOworCisJcGFyZW50X2RldiA9IHVkZXZfZGV2aWNlX2dldF9wYXJl bnQoZGV2KTsKKwlpZ3RfYXNzZXJ0KHBhcmVudF9kZXYpOworCisJc3Vic3lzdGVtID0gdWRldl9k ZXZpY2VfZ2V0X3N1YnN5c3RlbShwYXJlbnRfZGV2KTsKKwlzeXNwYXRoID0gdWRldl9kZXZpY2Vf Z2V0X3N5c3BhdGgocGFyZW50X2Rldik7CisKKwlwYXJlbnRfaWRldiA9IGlndF9kZXZpY2VfZmlu ZChzdWJzeXN0ZW0sIHN5c3BhdGgpOworCWlmICghcGFyZW50X2lkZXYpIHsKKwkJcGFyZW50X2lk ZXYgPSBpZ3RfZGV2aWNlX25ld19mcm9tX3VkZXYocGFyZW50X2Rldik7CisJCWlmIChpc19wY2lf c3Vic3lzdGVtKHBhcmVudF9pZGV2KSkgeworCQkJc2V0X3ZlbmRvcl9kZXZpY2UocGFyZW50X2lk ZXYpOworCQl9CisJCWlndF9saXN0X2FkZF90YWlsKCZwYXJlbnRfaWRldi0+bGluaywgJmlndF9k ZXZzLmFsbCk7CisJfQorCWRldm5hbWUgPSB1ZGV2X2RldmljZV9nZXRfZGV2bm9kZShkZXYpOwor CWlmIChkZXZuYW1lICE9IE5VTEwgJiYgc3Ryc3RyKGRldm5hbWUsICIvZGV2L2RyaS9jYXJkIikp CisJCXBhcmVudF9pZGV2LT5kcm1fY2FyZCA9IHN0cmR1cChkZXZuYW1lKTsKKwllbHNlIGlmIChk ZXZuYW1lICE9IE5VTEwgJiYgc3Ryc3RyKGRldm5hbWUsICIvZGV2L2RyaS9yZW5kZXIiKSkKKwkJ cGFyZW50X2lkZXYtPmRybV9yZW5kZXIgPSBzdHJkdXAoZGV2bmFtZSk7CisKKwlpZGV2LT5wYXJl bnQgPSBwYXJlbnRfaWRldjsKK30KKworc3RhdGljIHN0cnVjdCBpZ3RfZGV2aWNlICpkdXBsaWNh dGVfZGV2aWNlKHN0cnVjdCBpZ3RfZGV2aWNlICpkZXYpIHsKKwlzdHJ1Y3QgaWd0X2RldmljZSAq ZHVwID0gbWFsbG9jKHNpemVvZigqZHVwKSk7CisJbWVtY3B5KGR1cCwgZGV2LCBzaXplb2YoKmRl dikpOworCWR1cC0+bGluay5wcmV2ID0gTlVMTDsKKwlkdXAtPmxpbmsubmV4dCA9IE5VTEw7CisJ cmV0dXJuIGR1cDsKK30KKworc3RhdGljIGdpbnQgZGV2c19jb21wYXJlKGNvbnN0IHZvaWQgKmEs IGNvbnN0IHZvaWQgKmIpCit7CisJc3RydWN0IGlndF9kZXZpY2UgKmRldjEsICpkZXYyOworCWlu dCByZXQ7CisKKwlkZXYxID0gKihzdHJ1Y3QgaWd0X2RldmljZSAqKikgYTsKKwlkZXYyID0gKihz dHJ1Y3QgaWd0X2RldmljZSAqKikgYjsKKwlyZXQgPSBzdHJjbXAoZGV2MS0+c3Vic3lzdGVtLCBk ZXYyLT5zdWJzeXN0ZW0pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gc3Ry Y21wKGRldjEtPnN5c3BhdGgsIGRldjItPnN5c3BhdGgpOworfQorCitzdGF0aWMgdm9pZCBzb3J0 X2FsbF9kZXZpY2VzKHZvaWQpCit7CisJc3RydWN0IGlndF9kZXZpY2UgKmRldiwgKnRtcDsKKwlp bnQgbGVuID0gaWd0X2xpc3RfbGVuZ3RoKCZpZ3RfZGV2cy5hbGwpOworCXN0cnVjdCBpZ3RfZGV2 aWNlICoqZGV2cyA9IG1hbGxvYyhsZW4gKiBzaXplb2YoKmRldikpOworCisJaW50IGkgPSAwOwor CWlndF9saXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGV2LCB0bXAsICZpZ3RfZGV2cy5hbGwsIGxp bmspIHsKKwkJZGV2c1tpXSA9IGRldjsKKwkJaWd0X2Fzc2VydChpKysgPCBsZW4pOworCQlpZ3Rf bGlzdF9kZWwoJmRldi0+bGluayk7CisJfQorCisJcXNvcnQoZGV2cywgbGVuLCBzaXplb2YoKmRl dnMpLCBkZXZzX2NvbXBhcmUpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7CisJCWln dF9saXN0X2FkZF90YWlsKCZkZXZzW2ldLT5saW5rLCAmaWd0X2RldnMuYWxsKTsKKwl9CisKKwlm cmVlKGRldnMpOworfQorCisvKiBDb3JlIHNjYW5uaW5nIGZ1bmN0aW9uLgorICoKKyAqIEFsbCBz Y2FubmVkIGRldmljZXMgYXJlIGtlcHQgaW5zaWRlIGlndF9kZXZzLmFsbCBwb2ludGVyIGFycmF5 LgorICogRWFjaCBhZGRlZCBkZXZpY2UgaXMgaWd0X2RldmljZSBzdHJ1Y3R1cmUsIHdoaWNoIGNv bnRyYXJ5IHRvIHVkZXYgZGV2aWNlCisgKiBoYXMgcHJvcGVydGllcyAvIHN5c2F0dHJzIHN0b3Jl ZCBpbnNpZGUgaGFzaCB0YWJsZSBpbnN0ZWFkIG9mIGxpc3QuCisgKgorICogRnVuY3Rpb24gaXRl cmF0ZXMgb3ZlciBkZXZpY2VzIG9uICdkcm0nIHN1YnN5c3RlbS4gRm9yIGVhY2ggZHJtIGRldmlj ZQorICogaXRzIHBhcmVudCBpcyB0YWtlbiAoYnVzIGRldmljZSkgYW5kIHN0b3JlZCBpbnNpZGUg c2FtZSBhcnJheS4KKyAqIEZ1bmN0aW9uIHNvcnRzIGFsbCBmb3VuZCBkZXZpY2VzIHRvIGtlZXAg c2FtZSBvcmRlciBvZiBidXMgZGV2aWNlcworICogZm9yIHByb3ZpZGluZyBwcmVkaWN0YWJsZSBz ZWFyY2guCisgKi8KK3N0YXRpYyB2b2lkIHNjYW5fZHJtX2RldmljZXModm9pZCkKK3sKKwlzdHJ1 Y3QgdWRldiAqdWRldjsKKwlzdHJ1Y3QgdWRldl9lbnVtZXJhdGUgKmVudW1lcmF0ZTsKKwlzdHJ1 Y3QgdWRldl9saXN0X2VudHJ5ICpkZXZpY2VzLCAqZGV2X2xpc3RfZW50cnk7CisJc3RydWN0IGln dF9kZXZpY2UgKmRldjsKKwlpbnQgcmV0OworCisJdWRldiA9IHVkZXZfbmV3KCk7CisJaWd0X2Fz c2VydCh1ZGV2KTsKKworCWVudW1lcmF0ZSA9IHVkZXZfZW51bWVyYXRlX25ldyh1ZGV2KTsKKwlp Z3RfYXNzZXJ0KGVudW1lcmF0ZSk7CisKKwlEQkcoIlNjYW5uaW5nIGRybSBzdWJzeXN0ZW1cbiIp OworCXJldCA9IHVkZXZfZW51bWVyYXRlX2FkZF9tYXRjaF9zdWJzeXN0ZW0oZW51bWVyYXRlLCAi ZHJtIik7CisJaWd0X2Fzc2VydCghcmV0KTsKKworCXVkZXZfZW51bWVyYXRlX2FkZF9tYXRjaF9w cm9wZXJ0eShlbnVtZXJhdGUsICJERVZOQU1FIiwgIi9kZXYvZHJpLyoiKTsKKwlpZ3RfYXNzZXJ0 KCFyZXQpOworCisJcmV0ID0gdWRldl9lbnVtZXJhdGVfc2Nhbl9kZXZpY2VzKGVudW1lcmF0ZSk7 CisJaWd0X2Fzc2VydCghcmV0KTsKKworCWRldmljZXMgPSB1ZGV2X2VudW1lcmF0ZV9nZXRfbGlz dF9lbnRyeShlbnVtZXJhdGUpOworCWlmICghZGV2aWNlcykKKwkJcmV0dXJuOworCisJdWRldl9s aXN0X2VudHJ5X2ZvcmVhY2goZGV2X2xpc3RfZW50cnksIGRldmljZXMpIHsKKwkJY29uc3QgY2hh ciAqcGF0aDsKKwkJc3RydWN0IHVkZXZfZGV2aWNlICp1ZGV2X2RldjsKKwkJc3RydWN0IGlndF9k ZXZpY2UgKmlkZXY7CisKKwkJcGF0aCA9IHVkZXZfbGlzdF9lbnRyeV9nZXRfbmFtZShkZXZfbGlz dF9lbnRyeSk7CisJCXVkZXZfZGV2ID0gdWRldl9kZXZpY2VfbmV3X2Zyb21fc3lzcGF0aCh1ZGV2 LCBwYXRoKTsKKwkJaWRldiA9IGlndF9kZXZpY2VfbmV3X2Zyb21fdWRldih1ZGV2X2Rldik7CisJ CXVwZGF0ZV9vcl9hZGRfcGFyZW50KHVkZXZfZGV2LCBpZGV2KTsKKwkJaWd0X2xpc3RfYWRkX3Rh aWwoJmlkZXYtPmxpbmssICZpZ3RfZGV2cy5hbGwpOworCisJCXVkZXZfZGV2aWNlX3VucmVmKHVk ZXZfZGV2KTsKKwl9CisJdWRldl9lbnVtZXJhdGVfdW5yZWYoZW51bWVyYXRlKTsKKwl1ZGV2X3Vu cmVmKHVkZXYpOworCisJc29ydF9hbGxfZGV2aWNlcygpOworCisJaWd0X2xpc3RfZm9yX2VhY2hf ZW50cnkoZGV2LCAmaWd0X2RldnMuYWxsLCBsaW5rKSB7CisJCXN0cnVjdCBpZ3RfZGV2aWNlICpk ZXZfZHVwID0gZHVwbGljYXRlX2RldmljZShkZXYpOworCQlpZ3RfbGlzdF9hZGRfdGFpbCgmZGV2 X2R1cC0+bGluaywgJmlndF9kZXZzLmZpbHRlcmVkKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGln dF9kZXZpY2VfZnJlZShzdHJ1Y3QgaWd0X2RldmljZSAqZGV2KQoreworCWZyZWUoZGV2LT5kZXZu b2RlKTsKKwlmcmVlKGRldi0+c3Vic3lzdGVtKTsKKwlmcmVlKGRldi0+c3lzcGF0aCk7CisJZnJl ZShkZXYtPmRybV9jYXJkKTsKKwlmcmVlKGRldi0+ZHJtX3JlbmRlcik7CisJZnJlZShkZXYtPnZl bmRvcik7CisJZnJlZShkZXYtPmRldmljZSk7CisJZ19oYXNoX3RhYmxlX2Rlc3Ryb3koZGV2LT5h dHRyc19odCk7CisJZ19oYXNoX3RhYmxlX2Rlc3Ryb3koZGV2LT5wcm9wc19odCk7Cit9CisKKy8q KgorICogaWd0X2RldmljZXNfc2NhbgorICogQGZvcmNlOiBlbmZvcmNlIHNjYW5uaW5nIGRldmlj ZXMKKyAqCisgKiBGdW5jdGlvbiBzY2FucyB1ZGV2IGluIHNlYXJjaCBvZiBncHUgZGV2aWNlcy4g Rm9yIGZpcnN0IHJ1biBpdCBjYW4gYmUKKyAqIGNhbGxlZCB3aXRoIEBmb3JjZSA9IGZhbHNlLiBJ ZiBzb21ldGhpbmcgY2hhbmdlcyBkdXJpbmcgdGhlIHRoZSB0ZXN0CisgKiBvciB0ZXN0IGRvZXMg c29tZSBtb2R1bGUgbG9hZGluZyAobmV3IGRybSBkZXZpY2VzIG9jY3VycyBkdXJpbmcgZXhlY3V0 aW9uKQorICogZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYWdhaW4gd2l0aCBAZm9yY2UgPSB0cnVl IHRvIHJlZnJlc2ggZGV2aWNlIGFycmF5LgorICovCit2b2lkIGlndF9kZXZpY2VzX3NjYW4oYm9v bCBmb3JjZSkKK3sKKwlpZiAoZm9yY2UgJiYgaWd0X2RldnMuZGV2c19zY2FubmVkKSB7CisJCXN0 cnVjdCBpZ3RfZGV2aWNlICpkZXYsICp0bXA7CisJCWlndF9saXN0X2Zvcl9lYWNoX2VudHJ5X3Nh ZmUoZGV2LCB0bXAsICZpZ3RfZGV2cy5hbGwsIGxpbmspIHsKKwkJCWlndF9kZXZpY2VfZnJlZShk ZXYpOworCQkJZnJlZShkZXYpOworCQl9CisKKwkJaWd0X2RldnMuZGV2c19zY2FubmVkID0gZmFs c2U7CisJfQorCisJaWYgKGlndF9kZXZzLmRldnNfc2Nhbm5lZCkKKwkJcmV0dXJuOworCisJcHJl cGFyZV9zY2FuKCk7CisJc2Nhbl9kcm1fZGV2aWNlcygpOworCisJaWd0X2RldnMuZGV2c19zY2Fu bmVkID0gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9wcl9zaW1wbGUoY29uc3QgY2hh ciAqaywgY29uc3QgY2hhciAqdikKK3sKKwlwcmludGYoIiAgICAlLTE2czogJXNcbiIsIGssIHYp OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3ByX3NpbXBsZTIoY29uc3QgY2hhciAqaywgY29u c3QgY2hhciAqdjEsIGNvbnN0IGNoYXIgKnYyKQoreworCXByaW50ZigiICAgICUtMTZzOiAlczol c1xuIiwgaywgdjEsIHYyKTsKK30KKworc3RhdGljIHZvaWQgaWd0X2RldnNfcHJpbnRfc2ltcGxl KHN0cnVjdCBpZ3RfbGlzdF9oZWFkICp2aWV3KQoreworCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXY7 CisKKwlpZiAoIXZpZXcpCisJCXJldHVybjsKKworCWlmIChpZ3RfbGlzdF9lbXB0eSh2aWV3KSkg eworCQlwcmludGYoIk5vIEdQVSBkZXZpY2VzIGZvdW5kXG4iKTsKKwkJcmV0dXJuOworCX0KKwor CWlndF9saXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgdmlldywgbGluaykgeworCQlwcmludGYoInN5 czolc1xuIiwgZGV2LT5zeXNwYXRoKTsKKwkJaWYgKGRldi0+c3Vic3lzdGVtKQorCQkJX3ByX3Np bXBsZSgic3Vic3lzdGVtIiwgZGV2LT5zdWJzeXN0ZW0pOworCQlpZiAoZGV2LT5kcm1fY2FyZCkK KwkJCV9wcl9zaW1wbGUoImRybSBjYXJkIiwgZGV2LT5kcm1fY2FyZCk7CisJCWlmIChkZXYtPmRy bV9yZW5kZXIpCisJCQlfcHJfc2ltcGxlKCJkcm0gcmVuZGVyIiwgZGV2LT5kcm1fcmVuZGVyKTsK KwkJaWYgKGlzX2RybV9zdWJzeXN0ZW0oZGV2KSkgeworCQkJX3ByX3NpbXBsZTIoInBhcmVudCIs ICJzeXMiLAorCQkJCSAgIGRldi0+cGFyZW50LT5zeXNwYXRoKTsKKwkJfSBlbHNlIHsKKwkJCWlm IChpc19wY2lfc3Vic3lzdGVtKGRldikpIHsKKwkJCQlfcHJfc2ltcGxlKCJ2ZW5kb3IiLCBkZXYt PnZlbmRvcik7CisJCQkJX3ByX3NpbXBsZSgiZGV2aWNlIiwgZGV2LT5kZXZpY2UpOworCQkJfQor CQl9CisJCXByaW50ZigiXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfcHJpbnRf a2V5X3ZhbHVlKGNvbnN0IGNoYXIqIGssIGNvbnN0IGNoYXIgKnYpCit7CisJcHJpbnRmKCIlLTMy czogJXNcbiIsIGssIHYpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9odChHSGFzaFRhYmxlICpo dCkKK3sKKwlHTGlzdCAqa2V5cyA9IGdfaGFzaF90YWJsZV9nZXRfa2V5cyhodCk7CisKKwlrZXlz ID0gZ19saXN0X3NvcnQoa2V5cywgKEdDb21wYXJlRnVuYykgc3RyY21wKTsKKwl3aGlsZSAoa2V5 cykgeworCQljaGFyICprID0gKGNoYXIgKikga2V5cy0+ZGF0YTsKKwkJY2hhciAqdiA9IGdfaGFz aF90YWJsZV9sb29rdXAoaHQsIGspOworCisJCV9wcmludF9rZXlfdmFsdWUoaywgdik7CisJCWtl eXMgPSBnX2xpc3RfbmV4dChrZXlzKTsKKwl9CisJZ19saXN0X2ZyZWUoa2V5cyk7Cit9CisKK3N0 YXRpYyB2b2lkIGlndF9kZXZzX3ByaW50X2RldGFpbChzdHJ1Y3QgaWd0X2xpc3RfaGVhZCAqdmll dykKK3sKKwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2OworCisJaWYgKCF2aWV3KQorCQlyZXR1cm47 CisKKwlpZiAoaWd0X2xpc3RfZW1wdHkodmlldykpIHsKKwkJcHJpbnRmKCJObyBHUFUgZGV2aWNl cyBmb3VuZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZ3RfbGlzdF9mb3JfZWFjaF9lbnRyeShk ZXYsIHZpZXcsIGxpbmspIHsKKwkJcHJpbnRmKCI9PT09PT09PT09ICVzOiVzID09PT09PT09PT1c biIsCisJCSAgICAgICBkZXYtPnN1YnN5c3RlbSwgZGV2LT5zeXNwYXRoKTsKKwkJaWYgKCFpc19k cm1fc3Vic3lzdGVtKGRldikpIHsKKwkJCV9wcmludF9rZXlfdmFsdWUoImNhcmQgZGV2aWNlIiwg ZGV2LT5kcm1fY2FyZCk7CisJCQlfcHJpbnRfa2V5X3ZhbHVlKCJyZW5kZXIgZGV2aWNlIiwgZGV2 LT5kcm1fcmVuZGVyKTsKKwkJfQorCisJCXByaW50ZigiXG5bcHJvcGVydGllc11cbiIpOworCQlw cmludF9odChkZXYtPnByb3BzX2h0KTsKKwkJcHJpbnRmKCJcblthdHRyaWJ1dGVzXVxuIik7CisJ CXByaW50X2h0KGRldi0+YXR0cnNfaHQpOworCQlwcmludGYoIlxuIik7CisJfQorfQorCitzdGF0 aWMgc3RydWN0IHByaW50X2Z1bmMgeworCXZvaWQgKCpwcm4pKHN0cnVjdCBpZ3RfbGlzdF9oZWFk ICp2aWV3KTsKK30gcHJpbnRfZnVuY3Rpb25zW10gPSB7CisJW0lHVF9QUklOVF9TSU1QTEVdID0g eyAucHJuID0gaWd0X2RldnNfcHJpbnRfc2ltcGxlIH0sCisJW0lHVF9QUklOVF9ERVRBSUxdID0g eyAucHJuID0gaWd0X2RldnNfcHJpbnRfZGV0YWlsIH0sCit9OworCisvKioKKyAqIGlndF9kZXZp Y2VzX3ByaW50CisgKiBAcHJpbnR0eXBlOiBJR1RfUFJJTlRfU0lNUExFIG9yIElHVF9QUklOVF9E RVRBSUwKKyAqCisgKiBGdW5jdGlvbiBjYW4gYmUgdXNlZCBieSBleHRlcm5hbCB0b29sIHRvIHBy aW50IGRldmljZSBhcnJheSBpbiBzaW1wbGUKKyAqIG9yIGRldGFpbGVkIGZvcm0uIFRoaXMgZnVu Y3Rpb24gaXMgYWRkZWQgaGVyZSB0byBhdm9pZCBleHBvc2luZworICogaW50ZXJuYWwgaW1wbGVt ZW50YXRpb24gZGF0YSBzdHJ1Y3R1cmVzLgorICovCit2b2lkIGlndF9kZXZpY2VzX3ByaW50KGVu dW0gaWd0X2RldmljZXNfcHJpbnRfdHlwZSBwcmludHR5cGUpCit7CisJcHJpbnRfZnVuY3Rpb25z W3ByaW50dHlwZV0ucHJuKCZpZ3RfZGV2cy5maWx0ZXJlZCk7Cit9CisKKy8qKgorICogaWd0X2Rl dmljZXNfcHJpbnRfdmVuZG9ycworICoKKyAqIFByaW50IHBjaSBpZCAtPiB2ZW5kb3IgbWFwcGlu Z3MuIFZlbmRvciBuYW1lcyBwcmludGVkIGJ5IHRoaXMgZnVuY3Rpb24KKyAqIGNhbiBiZSB1c2Vk IGZvciBmaWx0ZXJzIGxpa2UgcGNpIHdoaWNoIGFsbG93cyBwYXNzaW5nIHZlbmRvciAtIGxpa2UK KyAqIHZlbmRvciBpZCAoODA4Nikgb3IgYXMgYSBzdHJpbmcgKEludGVsKS4KKyAqLwordm9pZCBp Z3RfZGV2aWNlc19wcmludF92ZW5kb3JzKHZvaWQpCit7CisJcHJpbnRmKCJSZWNvZ25pemVkIHZl bmRvcnM6XG4iKTsKKwlwcmludGYoIiUtOHMgJS0xNnNcbiIsICJQQ0kgSUQiLCAidmVuZG9yIik7 CisJZm9yICh0eXBlb2YoKnBjaV92ZW5kb3JfbWFwcGluZykgKnZtID0gcGNpX3ZlbmRvcl9tYXBw aW5nOyB2bS0+bmFtZTsgdm0rKykgeworCQlwcmludGYoIiUtOHMgJS0xNnNcbiIsIHZtLT52ZW5k b3JfaWQsIHZtLT5uYW1lKTsKKwl9Cit9CisKK3N0cnVjdCBmaWx0ZXI7CisKKy8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0gKi8KK3N0cnVjdCBmaWx0ZXJfY2xhc3MgeworCXN0cnVjdCBpZ3RfbGlzdF9oZWFk ICooKmZpbHRlcl9mdW5jdGlvbikoY29uc3Qgc3RydWN0IGZpbHRlcl9jbGFzcyAqZmNscywKKwkJ CQkJCSBjb25zdCBzdHJ1Y3QgZmlsdGVyICpmaWx0ZXIpOworCWJvb2wgKCppc192YWxpZCkoY29u c3Qgc3RydWN0IGZpbHRlcl9jbGFzcyAqZmNscywKKwkJCSBjb25zdCBzdHJ1Y3QgZmlsdGVyICpm aWx0ZXIpOworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqaGVscDsKKwljb25zdCBj aGFyICpkZXRhaWw7Cit9OworCisjZGVmaW5lIEZJTFRFUl9OQU1FX0xFTiAzMgorI2RlZmluZSBG SUxURVJfREFUQV9MRU4gMjU2CisKK3N0cnVjdCBmaWx0ZXIgeworCXN0cnVjdCBmaWx0ZXJfY2xh c3MgKmNsYXNzOworCisJY2hhciByYXdfZGF0YVtGSUxURVJfREFUQV9MRU5dOworCisJc3RydWN0 IHsKKwkJY2hhciAqdmVuZG9yOworCQljaGFyICpkZXZpY2U7CisJCWNoYXIgKmNhcmQ7CisJCWNo YXIgKmRybTsKKwkJY2hhciAqZHJpdmVyOworCX0gZGF0YTsKK307CisKK3N0YXRpYyB2b2lkIGZp bGxfZmlsdGVyX2RhdGEoc3RydWN0IGZpbHRlciAqZmlsdGVyLCBjb25zdCBjaGFyICprZXksIGNv bnN0IGNoYXIgKnZhbHVlKQoreworCWlmIChrZXkgPT0gTlVMTCB8fCB2YWx1ZSA9PSBOVUxMKSB7 CisJCXJldHVybjsKKwl9CisKKyNkZWZpbmUgX19maWxsX2tleShuYW1lKSBpZiAoc3RyY21wKGtl eSwgI25hbWUpID09IDApIFwKKwlmaWx0ZXItPmRhdGEubmFtZSA9IHN0cmR1cCh2YWx1ZSkKKwlf X2ZpbGxfa2V5KHZlbmRvcik7CisJX19maWxsX2tleShkZXZpY2UpOworCV9fZmlsbF9rZXkoY2Fy ZCk7CisJX19maWxsX2tleShkcm0pOworCV9fZmlsbF9rZXkoZHJpdmVyKTsKKyN1bmRlZiBfX2Zp bGxfa2V5CisKK30KKworc3RhdGljIHZvaWQgc3BsaXRfZmlsdGVyX2RhdGEoc3RydWN0IGZpbHRl ciAqZmlsdGVyKQoreworCWNoYXIgKnByb3BlcnR5LCAqa2V5LCAqZGF0YSwgKmR1cDsKKworCWR1 cCA9IHN0cmR1cChmaWx0ZXItPnJhd19kYXRhKTsKKwlkYXRhID0gZHVwOworCisJd2hpbGUgKChw cm9wZXJ0eSA9IHN0cnNlcCgmZGF0YSwgIiwiKSkpIHsKKwkJa2V5ID0gc3Ryc2VwKCZwcm9wZXJ0 eSwgIj0iKTsKKwkJZmlsbF9maWx0ZXJfZGF0YShmaWx0ZXIsIGtleSwgcHJvcGVydHkpOworCX0K KworCWZyZWUoZHVwKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWx0ZXJfY2xhc3MgKmdldF9maWx0 ZXJfY2xhc3MoY29uc3QgY2hhciAqY2xhc3NfbmFtZSwgY29uc3Qgc3RydWN0IGZpbHRlciAqZmls dGVyKTsKKworc3RhdGljIGJvb2wgcGFyc2VfZmlsdGVyKGNvbnN0IGNoYXIgKmZzdHIsIHN0cnVj dCBmaWx0ZXIgKmZpbHRlcikKK3sKKwljaGFyIGNsYXNzX25hbWVbMzJdOworCWlmICghZnN0ciB8 fCAhZmlsdGVyKQorCQlyZXR1cm4gZmFsc2U7CisKKwltZW1zZXQoZmlsdGVyLCAwLCBzaXplb2Yo KmZpbHRlcikpOworCisJaWYgKHNzY2FuZihmc3RyLCAiJTMxW146XTolMjU1cyIsIGNsYXNzX25h bWUsIGZpbHRlci0+cmF3X2RhdGEpID49IDEpIHsKKwkJZmlsdGVyLT5jbGFzcyA9IGdldF9maWx0 ZXJfY2xhc3MoY2xhc3NfbmFtZSwgZmlsdGVyKTsKKwkJc3BsaXRfZmlsdGVyX2RhdGEoZmlsdGVy KTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9v bCBpc192ZW5kb3JfbWF0Y2hlZChzdHJ1Y3QgaWd0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyICp2 ZW5kb3IpCit7CisJY29uc3QgY2hhciAqdmVuZG9yX2lkOworCisJaWYgKCFkZXYtPnZlbmRvciB8 fCAhdmVuZG9yKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBGaXJzdCB3ZSBjb21wYXJlIHZlbmRv ciBpZCwgbGlrZSA4MDg2ICovCisJaWYgKCFzdHJjYXNlY21wKGRldi0+dmVuZG9yLCB2ZW5kb3Ip KQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIExpa2VseSB3ZSBoYXZlIHZlbmRvciBzdHJpbmcgaW5z dGVhZCBvZiBpZCAqLworCXZlbmRvcl9pZCA9IGdldF9wY2lfdmVuZG9yX2lkX2J5X25hbWUodmVu ZG9yKTsKKwlpZiAoIXZlbmRvcl9pZCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuICFzdHJj YXNlY21wKGRldi0+dmVuZG9yLCB2ZW5kb3JfaWQpOworfQorCisvKiBGaWx0ZXIgd2hpY2ggbWF0 Y2hlcyBzdWJzeXN0ZW06L3N5cy8uLi4gcGF0aC4KKyAqIFVzZWQgYXMgZmlyc3QgZmlsdGVyIGlu IGNoYWluLgorICovCitzdGF0aWMgc3RydWN0IGlndF9saXN0X2hlYWQgKmZpbHRlcl9zeXMoY29u c3Qgc3RydWN0IGZpbHRlcl9jbGFzcyAqZmNscywKKwkJCQkJY29uc3Qgc3RydWN0IGZpbHRlciAq ZmlsdGVyKQoreworCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXY7CisJKHZvaWQpIGZjbHM7CisKKwlE QkcoImZpbHRlciBzeXNcbiIpOworCWlmICghc3RybGVuKGZpbHRlci0+cmF3X2RhdGEpKQorCQly ZXR1cm4gJmlndF9kZXZzLmZpbHRlcmVkOworCisJZGV2ID0gaWd0X2RldmljZV9mcm9tX3N5c3Bh dGgoZmlsdGVyLT5yYXdfZGF0YSk7CisJaWYgKGRldikgeworCQlzdHJ1Y3QgaWd0X2RldmljZSAq ZHVwID0gZHVwbGljYXRlX2RldmljZShkZXYpOworCQlpZ3RfbGlzdF9hZGRfdGFpbCgmZHVwLT5s aW5rLCAmaWd0X2RldnMuZmlsdGVyZWQpOworCX0KKworCXJldHVybiAmaWd0X2RldnMuZmlsdGVy ZWQ7Cit9CisKKy8qIEZpbmQgZHJtIGRldmljZSB1c2luZyBkaXJlY3QgcGF0aCB0byAvZGV2L2Ry aS8uCisgKiBJdCBleHRlbmRzIGZpbHRlcl9zeXMgdG8gYWxsb3cgdXNpbmcgZHJtOi9kZXYvZHJp L2NhcmRYIGFuZAorICogZHJtOi9kZXYvZHJpL3JlbmRlckRYIGZpbHRlciBzeW50YXguCisgKi8K K3N0YXRpYyBzdHJ1Y3QgaWd0X2xpc3RfaGVhZCAqZmlsdGVyX2RybShjb25zdCBzdHJ1Y3QgZmls dGVyX2NsYXNzICpmY2xzLAorCQkJCQljb25zdCBzdHJ1Y3QgZmlsdGVyICpmaWx0ZXIpCit7CisJ c3RydWN0IGlndF9kZXZpY2UgKmRldjsKKwkodm9pZCkgZmNsczsKKworCURCRygiZmlsdGVyIGRy bVxuIik7CisJaWYgKCFzdHJsZW4oZmlsdGVyLT5yYXdfZGF0YSkpCisJCXJldHVybiAmaWd0X2Rl dnMuZmlsdGVyZWQ7CisKKwlpZ3RfbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZpZ3RfZGV2cy5h bGwsIGxpbmspIHsKKwkJaWYgKCFpc19kcm1fc3Vic3lzdGVtKGRldikpCisJCQljb250aW51ZTsK KworCQlpZiAoc3RyZXF1YWwoZGV2LT5zeXNwYXRoLCBmaWx0ZXItPnJhd19kYXRhKSB8fAorCQkJ c3RyZXF1YWwoZGV2LT5kcm1fY2FyZCwgZmlsdGVyLT5yYXdfZGF0YSkgfHwKKwkJCXN0cmVxdWFs KGRldi0+ZHJtX3JlbmRlciwgZmlsdGVyLT5yYXdfZGF0YSkpIHsKKwkJCXN0cnVjdCBpZ3RfZGV2 aWNlICpkdXAgPSBkdXBsaWNhdGVfZGV2aWNlKGRldik7CisJCQlpZ3RfbGlzdF9hZGRfdGFpbCgm ZHVwLT5saW5rLCAmaWd0X2RldnMuZmlsdGVyZWQpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwor CXJldHVybiAmaWd0X2RldnMuZmlsdGVyZWQ7Cit9CisKKy8qIEZpbmQgYXBwcm9wcmlhdGUgcGNp IGRldmljZSBtYXRjaGluZyB2ZW5kb3IvZGV2aWNlL2NhcmQgZmlsdGVyIGFyZ3VtZW50cy4KKyAq Lworc3RhdGljIHN0cnVjdCBpZ3RfbGlzdF9oZWFkICpmaWx0ZXJfcGNpKGNvbnN0IHN0cnVjdCBm aWx0ZXJfY2xhc3MgKmZjbHMsCisJCQkJCWNvbnN0IHN0cnVjdCBmaWx0ZXIgKmZpbHRlcikKK3sK KwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2OworCWludCBjYXJkID0gLTE7CisJKHZvaWQpIGZjbHM7 CisKKwlEQkcoImZpbHRlciBwY2lcbiIpOworCisJaWYgKGZpbHRlci0+ZGF0YS5jYXJkKSB7CisJ CXNzY2FuZihmaWx0ZXItPmRhdGEuY2FyZCwgIiVkIiwgJmNhcmQpOworCQlpZiAoY2FyZCA8IDAp IHsKKwkJCXJldHVybiAmaWd0X2RldnMuZmlsdGVyZWQ7CisJCX0KKwl9IGVsc2UgeworCQljYXJk ID0gMDsKKwl9CisKKwlpZ3RfbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZpZ3RfZGV2cy5hbGws IGxpbmspIHsKKwkJaWYgKCFpc19wY2lfc3Vic3lzdGVtKGRldikpCisJCQljb250aW51ZTsKKwor CQkvKiBTa2lwIGlmICd2ZW5kb3InIGRvZXNuJ3QgbWF0Y2ggKGhleCBvciBuYW1lKSAqLworCQlp ZiAoZmlsdGVyLT5kYXRhLnZlbmRvciAmJiAhaXNfdmVuZG9yX21hdGNoZWQoZGV2LCBmaWx0ZXIt PmRhdGEudmVuZG9yKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFNraXAgaWYgJ2RldmljZScgZG9l c24ndCBtYXRjaCAqLworCQlpZiAoZmlsdGVyLT5kYXRhLmRldmljZSAmJiBzdHJjYXNlY21wKGZp bHRlci0+ZGF0YS5kZXZpY2UsIGRldi0+ZGV2aWNlKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFdl IGdldCBuLXRoIGNhcmQgKi8KKwkJaWYgKCFjYXJkKSB7CisJCQlzdHJ1Y3QgaWd0X2RldmljZSAq ZHVwID0gZHVwbGljYXRlX2RldmljZShkZXYpOworCQkJaWd0X2xpc3RfYWRkX3RhaWwoJmR1cC0+ bGluaywgJmlndF9kZXZzLmZpbHRlcmVkKTsKKwkJCWJyZWFrOworCQl9CisJCWNhcmQtLTsKKwl9 CisKKwlEQkcoIkZpbHRlciBwY2kgZmlsdGVyZWQgc2l6ZTogJWRcbiIsIGlndF9saXN0X2xlbmd0 aCgmaWd0X2RldnMuZmlsdGVyZWQpKTsKKworCXJldHVybiAmaWd0X2RldnMuZmlsdGVyZWQ7Cit9 CisKK3N0YXRpYyBib29sIHN5c19wYXRoX3ZhbGlkKGNvbnN0IHN0cnVjdCBmaWx0ZXJfY2xhc3Mg KmZjbHMsCisJCQkgICBjb25zdCBzdHJ1Y3QgZmlsdGVyICpmaWx0ZXIpCit7CisJc3RydWN0IHN0 YXQgc3Q7CisKKwlpZiAoc3RhdChmaWx0ZXItPnJhd19kYXRhLCAmc3QpKSB7CisJCWlndF93YXJu KCJzeXNfcGF0aF92YWxpZDogc3lzcGF0aCBbJXNdLCBlcnI6ICVzXG4iLAorCQkJIGZpbHRlci0+ cmF3X2RhdGEsIHN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1 cm4gdHJ1ZTsKK30KKworCitzdGF0aWMgc3RydWN0IGZpbHRlcl9jbGFzcyBmaWx0ZXJfZGVmaW5p dGlvbl9saXN0W10gPSB7CisJeworCQkubmFtZSA9ICJzeXMiLAorCQkuaXNfdmFsaWQgPSBzeXNf cGF0aF92YWxpZCwKKwkJLmZpbHRlcl9mdW5jdGlvbiA9IGZpbHRlcl9zeXMsCisJCS5oZWxwID0g InN5czovc3lzL2RldmljZXMvcGNpMDAwMDowMC8wMDAwOjAwOjAyLjAiLAorCQkuZGV0YWlsID0g ImZpbmQgZGV2aWNlIGJ5dCBpdHMgc3lzZnMgcGF0aFxuIiwKKwl9LAorCXsKKwkJLm5hbWUgPSAi ZHJtIiwKKwkJLmZpbHRlcl9mdW5jdGlvbiA9IGZpbHRlcl9kcm0sCisJCS5oZWxwID0gImRybTov ZGV2L2RyaS8qIHBhdGgiLAorCQkuZGV0YWlsID0gImZpbmQgZHJtIGRldmljZSBieSAvZGV2L2Ry aS8qIG5vZGVcbiIsCisJfSwKKwl7CisJCS5uYW1lID0gInBjaSIsCisJCS5maWx0ZXJfZnVuY3Rp b24gPSBmaWx0ZXJfcGNpLAorCQkuaGVscCA9ICJwY2k6W3ZlbmRvcj0lMDR4L25hbWVdWyxkZXZp Y2U9JTA0eF1bLGNhcmQ9JWRdIiwKKwkJLmRldGFpbCA9ICJ2ZW5kb3IgaXMgaGV4IG51bWJlciBv ciB2ZW5kb3IgbmFtZVxuIiwKKwl9LAorCXsKKwkJLm5hbWUgPSBOVUxMLAorCX0sCit9OworCitz dGF0aWMgc3RydWN0IGZpbHRlcl9jbGFzcyAqZ2V0X2ZpbHRlcl9jbGFzcyhjb25zdCBjaGFyICpj bGFzc19uYW1lLCBjb25zdCBzdHJ1Y3QgZmlsdGVyICpmaWx0ZXIpCit7CisJc3RydWN0IGZpbHRl cl9jbGFzcyAqZmNscyA9IE5VTEw7CisJaW50IGkgPSAwOworCisJd2hpbGUgKChmY2xzID0gJmZp bHRlcl9kZWZpbml0aW9uX2xpc3RbaSsrXSktPm5hbWUgIT0gTlVMTCkgeworCQlpZiAoc3RyY21w KGNsYXNzX25hbWUsIGZjbHMtPm5hbWUpID09IDApCisJCQlyZXR1cm4gZmNsczsKKwl9CisKKwly ZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBAaWd0X2RldmljZV9wcmludF9maWx0ZXJfdHlwZXMK KyAqCisgKiBQcmludCBhbGwgZmlsdGVycyBzeW50YXggZm9yIGRldmljZSBzZWxlY3Rpb24uCisg Ki8KK3ZvaWQgaWd0X2RldmljZV9wcmludF9maWx0ZXJfdHlwZXModm9pZCkKK3sKKwljb25zdCBz dHJ1Y3QgZmlsdGVyX2NsYXNzICpmaWx0ZXIgPSBOVUxMOworCWludCBpID0gMDsKKworCXByaW50 ZigiRmlsdGVyIHR5cGVzOlxuLS0tXG4iKTsKKwlwcmludGYoIiUtMTJzICAlc1xuLS0tXG4iLCAi ZmlsdGVyIiwgInN5bnRheCIpOworCisJd2hpbGUgKChmaWx0ZXIgPSAmZmlsdGVyX2RlZmluaXRp b25fbGlzdFtpKytdKS0+bmFtZSAhPSBOVUxMKSB7CisJCXByaW50ZigiJS0xMnMgICVzXG4iLCBm aWx0ZXItPm5hbWUsIGZpbHRlci0+aGVscCk7CisJCXByaW50ZigiJS0xMnMgICVzXG4iLCAiIiwg ZmlsdGVyLT5kZXRhaWwpOworCX0KK30KKworc3RhdGljIGNoYXIgKmRldmljZV9maWx0ZXI7CisK Ky8qKgorICogaWd0X2RldmljZV9pc19maWx0ZXJfc2V0CisgKgorICogUmV0dXJucyB3aGV0aGVy IHdlIGhhdmUgYSBmaWx0ZXIgc2V0LgorICovCitib29sIGlndF9kZXZpY2VfaXNfZmlsdGVyX3Nl dCh2b2lkKQoreworCXJldHVybiBkZXZpY2VfZmlsdGVyICE9IE5VTEw7Cit9CisKKy8qIENoZWNr IGRvZXMgZmlsdGVyIGlzIHZhbGlkLiBJdCBjaGVja3M6CisgKiAxLiAvc3lzLy4uLiBwYXRoIGZp cnN0CisgKiAyLiBmaWx0ZXIgbmFtZSBmcm9tIGZpbHRlciBkZWZpbml0aW9uCisgKi8KK3N0YXRp YyBib29sIGlzX2ZpbHRlcl92YWxpZChjb25zdCBjaGFyICpmc3RyKQoreworCXN0cnVjdCBmaWx0 ZXIgZmlsdGVyOworCWludCByZXQ7CisKKwlyZXQgPSBwYXJzZV9maWx0ZXIoZnN0ciwgJmZpbHRl cik7CisJaWYgKCFyZXQpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChmaWx0ZXIuY2xhc3MgPT0g TlVMTCkgeworCQlpZ3Rfd2FybigiTm8gZmlsdGVyIGNsYXNzIG1hdGNoaW5nIFslc11cbiIsIGZz dHIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKGZpbHRlci5jbGFzcy0+aXNfdmFsaWQg IT0gTlVMTCAmJiAhZmlsdGVyLmNsYXNzLT5pc192YWxpZChmaWx0ZXIuY2xhc3MsICZmaWx0ZXIp KQorCXsKKwkJaWd0X3dhcm4oIkZpbHRlciBub3QgdmFsaWQgWyVzOiVzXVxuIiwgZmlsdGVyLmNs YXNzLT5uYW1lLCBmaWx0ZXIucmF3X2RhdGEpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0 dXJuIHRydWU7Cit9CisKKy8qKgorICogaWd0X2RldmljZV9maWx0ZXJfc2V0CisgKiBAZmlsdGVy OiBmaWx0ZXIgdGhhdCBzaG91bGQgYmUgc2V0IGdsb2JhbGx5CisgKi8KK3ZvaWQgaWd0X2Rldmlj ZV9maWx0ZXJfc2V0KGNvbnN0IGNoYXIgKmZpbHRlcikKK3sKKwlpZiAoIWlzX2ZpbHRlcl92YWxp ZChmaWx0ZXIpKSB7CisJCWlndF93YXJuKCJJbnZhbGlkIGZpbHRlcjogJXNcbiIsIGZpbHRlcik7 CisJCXJldHVybjsKKwl9CisKKwlpZiAoZGV2aWNlX2ZpbHRlciAhPSBOVUxMKQorCQlmcmVlKGRl dmljZV9maWx0ZXIpOworCisJZGV2aWNlX2ZpbHRlciA9IHN0cmR1cChmaWx0ZXIpOworfQorCisv KioKKyAqIGlndF9kZXZpY2VfZmlsdGVyX2ZyZWUKKyAqCisgKiBGcmVlIHRoZSBmaWx0ZXIgdGhh dCB3ZSBzdG9yZSBpbnRlcm5hbGx5LCBlZmZlY3RpdmVseSB1bnNldHRpbmcgaXQuCisgKi8KK3Zv aWQgaWd0X2RldmljZV9maWx0ZXJfZnJlZSh2b2lkKQoreworCWlmIChkZXZpY2VfZmlsdGVyICE9 IE5VTEwpCisJCWZyZWUoZGV2aWNlX2ZpbHRlcik7CisKKwlkZXZpY2VfZmlsdGVyID0gTlVMTDsK K30KKworLyoqCisgKiBpZ3RfZGV2aWNlX2ZpbHRlcl9nZXQKKyAqCisgKiBSZXR1cm5zIGZpbHRl ciBzdHJpbmcgb3IgTlVMTCBpZiBub3Qgc2V0CisgKi8KK2NvbnN0IGNoYXIgKmlndF9kZXZpY2Vf ZmlsdGVyX2dldCh2b2lkKQoreworCXJldHVybiBkZXZpY2VfZmlsdGVyOworfQorCitzdGF0aWMg Ym9vbCBpZ3RfZGV2aWNlX2ZpbHRlcl9hcHBseShjb25zdCBjaGFyICpmc3RyKQoreworCXN0cnVj dCBpZ3RfZGV2aWNlICpkZXYsICp0bXA7CisJc3RydWN0IGZpbHRlciBmaWx0ZXI7CisJYm9vbCBy ZXQ7CisKKwlpZiAoIWZzdHIpCisJCXJldHVybiBmYWxzZTsKKworCXJldCA9IHBhcnNlX2ZpbHRl cihmc3RyLCAmZmlsdGVyKTsKKwlpZiAoIXJldCkgeworCQlpZ3Rfd2FybigiQ2FuJ3Qgc3BsaXQg ZmlsdGVyIFslc11cbiIsIGZzdHIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogQ2xlYW4g dGhlIGZpbHRlcmVkIGxpc3QgKi8KKwlpZ3RfbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRldiwg dG1wLCAmaWd0X2RldnMuZmlsdGVyZWQsIGxpbmspIHsKKwkJaWd0X2xpc3RfZGVsKCZkZXYtPmxp bmspOworCQlmcmVlKGRldik7CisJfQorCisJLyogSWYgZmlsdGVyLmRhdGEgY29udGFpbnMgIi9z eXMiIHVzZSBkaXJlY3QgcGF0aCBpbnN0ZWFkCisJICogY29udGV4dHVhbCBmaWx0ZXIuCisJICov CisKKwlpZiAoIWZpbHRlci5jbGFzcykgeworCQlpZ3Rfd2FybigiTm8gZmlsdGVyIGNsYXNzIG1h dGNoaW5nIFslc11cbiIsIGZzdHIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCWZpbHRlci5jbGFz cy0+ZmlsdGVyX2Z1bmN0aW9uKGZpbHRlci5jbGFzcywgJmZpbHRlcik7CisKKwlyZXR1cm4gdHJ1 ZTsKK30KKworLyoqCisgKiBpZ3RfZGV2aWNlX2NhcmRfbWF0Y2gKKyAqIEBmaWx0ZXI6IGZpbHRl ciBzdHJpbmcKKyAqIEBjYXJkOiBwb2ludGVyIHRvIGlndF9kZXZpY2VfY2FyZCBzdHJ1Y3QKKyAq CisgKiBGdW5jdGlvbiBhcHBsaWVzIGZpbHRlciB0byBtYXRjaCBkZXZpY2UgZnJvbSBkZXZpY2Ug YXJyYXkuCisgKgorICogUmV0dXJuczoKKyAqIGZhbHNlIC0gbm8gY2FyZCBwb2ludGVyIHdhcyBw YXNzZWQgb3IgY2FyZCB3YXNuJ3QgbWF0Y2hlZCwKKyAqIHRydWUgLSBjYXJkIG1hdGNoZWQgYW5k IHJldHVybmVkLgorICovCitib29sIGlndF9kZXZpY2VfY2FyZF9tYXRjaChjb25zdCBjaGFyICpm aWx0ZXIsIHN0cnVjdCBpZ3RfZGV2aWNlX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IGlndF9kZXZp Y2UgKmRldiA9IE5VTEw7CisKKwlpZiAoIWNhcmQpCisJCXJldHVybiBmYWxzZTsKKwltZW1zZXQo Y2FyZCwgMCwgc2l6ZW9mKCpjYXJkKSk7CisKKwlpZ3RfZGV2aWNlc19zY2FuKGZhbHNlKTsKKwor CWlmIChpZ3RfZGV2aWNlX2ZpbHRlcl9hcHBseShmaWx0ZXIpID09IGZhbHNlKQorCQlyZXR1cm4g ZmFsc2U7CisKKwlpZiAoaWd0X2xpc3RfZW1wdHkoJmlndF9kZXZzLmZpbHRlcmVkKSkKKwkJcmV0 dXJuIGZhbHNlOworCisJLyogV2UgdGFrZSBmaXJzdCBvbmUgaWYgbW9yZSB0aGFuIG9uZSBjYXJk IG1hdGNoZXMgZmlsdGVyICovCisJZGV2ID0gaWd0X2xpc3RfZmlyc3RfZW50cnkoJmlndF9kZXZz LmZpbHRlcmVkLCBkZXYsIGxpbmspOworCisJaWYgKGRldi0+c3Vic3lzdGVtICE9IE5VTEwpCisJ CXN0cm5jcHkoY2FyZC0+c3Vic3lzdGVtLCBkZXYtPnN1YnN5c3RlbSwKKwkJCSAgICAgc2l6ZW9m KGNhcmQtPnN1YnN5c3RlbSkgLSAxKTsKKworCWlmIChkZXYtPmRybV9jYXJkICE9IE5VTEwpCisJ CXN0cm5jcHkoY2FyZC0+Y2FyZCwgZGV2LT5kcm1fY2FyZCwKKwkJCSAgICAgc2l6ZW9mKGNhcmQt PmNhcmQpIC0gMSk7CisKKwlpZiAoZGV2LT5kcm1fcmVuZGVyICE9IE5VTEwpCisJCXN0cm5jcHko Y2FyZC0+cmVuZGVyLCBkZXYtPmRybV9yZW5kZXIsCisJCQkgICAgIHNpemVvZihjYXJkLT5yZW5k ZXIpIC0gMSk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiBpZ3Rfb3Blbl9jYXJkOgor ICogQGNhcmQ6IHBvaW50ZXIgdG8gaWd0X2RldmljZV9jYXJkIHN0cnVjdHVyZQorICoKKyAqIE9w ZW4gL2Rldi9kcmkvY2FyZFggZGV2aWNlIHJlcHJlc2VudGVkIGJ5IGlndF9kZXZpY2VfY2FyZCBz dHJ1Y3R1cmUuCisgKiBSZXF1aXJlcyBmaWxsZWQgQGNhcmQgYXJndW1lbnQgKHNlZSBpZ3RfZGV2 aWNlX2NhcmRfbWF0Y2goKSBmdW5jdGlvbikuCisgKgorICogQW4gb3BlbiBEUk0gZmQgb3IgLTEg b24gZXJyb3IKKyAqLworaW50IGlndF9vcGVuX2NhcmQoc3RydWN0IGlndF9kZXZpY2VfY2FyZCAq Y2FyZCkKK3sKKwlpZiAoIWNhcmQgfHwgIXN0cmxlbihjYXJkLT5jYXJkKSkKKwkJcmV0dXJuIC0x OworCisJcmV0dXJuIG9wZW4oY2FyZC0+Y2FyZCwgT19SRFdSKTsKK30KKworLyoqCisgKiBpZ3Rf b3Blbl9yZW5kZXI6CisgKiBAY2FyZDogcG9pbnRlciB0byBpZ3RfZGV2aWNlX2NhcmQgc3RydWN0 dXJlCisgKgorICogT3BlbiAvZGV2L2RyaS9yZW5kZXJEWCBkZXZpY2UgcmVwcmVzZW50ZWQgYnkg aWd0X2RldmljZV9jYXJkIHN0cnVjdHVyZS4KKyAqIFJlcXVpcmVzIGZpbGxlZCBAY2FyZCBhcmd1 bWVudCAoc2VlIGlndF9kZXZpY2VfY2FyZF9tYXRjaCgpIGZ1bmN0aW9uKS4KKyAqCisgKiBBbiBv cGVuIERSTSBmZCBvciAtMSBvbiBlcnJvcgorICovCitpbnQgaWd0X29wZW5fcmVuZGVyKHN0cnVj dCBpZ3RfZGV2aWNlX2NhcmQgKmNhcmQpCit7CisJaWYgKCFjYXJkIHx8ICFzdHJsZW4oY2FyZC0+ cmVuZGVyKSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIG9wZW4oY2FyZC0+cmVuZGVyLCBPX1JE V1IpOworfQpkaWZmIC0tZ2l0IGEvbGliL2lndF9kZXZpY2Vfc2Nhbi5oIGIvbGliL2lndF9kZXZp Y2Vfc2Nhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi40NGM5OWRlYwot LS0gL2Rldi9udWxsCisrKyBiL2xpYi9pZ3RfZGV2aWNlX3NjYW4uaApAQCAtMCwwICsxLDY0IEBA CisvKgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAq IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwg YW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChp bmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxs IGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoK KyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBT SEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBB Q1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBP VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9U SEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpZm5kZWYgX19J R1RfREVWSUNFX1NDQU5fSF9fCisjZGVmaW5lIF9fSUdUX0RFVklDRV9TQ0FOX0hfXworCisjaW5j bHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8aWd0Lmg+CisKK2VudW0gaWd0X2RldmljZXNfcHJp bnRfdHlwZSB7CisJSUdUX1BSSU5UX1NJTVBMRSwKKwlJR1RfUFJJTlRfREVUQUlMLAorfTsKKwor c3RydWN0IGlndF9kZXZpY2VfY2FyZCB7CisJY2hhciBzdWJzeXN0ZW1bTkFNRV9NQVhdOworCWNo YXIgY2FyZFtOQU1FX01BWF07CisJY2hhciByZW5kZXJbTkFNRV9NQVhdOworfTsKKwordm9pZCBp Z3RfZGV2aWNlc19zY2FuKGJvb2wgZm9yY2UpOworCit2b2lkIGlndF9kZXZpY2VzX3ByaW50KGVu dW0gaWd0X2RldmljZXNfcHJpbnRfdHlwZSBwcmludHR5cGUpOwordm9pZCBpZ3RfZGV2aWNlc19w cmludF92ZW5kb3JzKHZvaWQpOwordm9pZCBpZ3RfZGV2aWNlX3ByaW50X2ZpbHRlcl90eXBlcyh2 b2lkKTsKKworLyoKKyAqIEhhbmRsZSBkZXZpY2UgZmlsdGVyIGNvbGxlY3Rpb24gYXJyYXkuCisg KiBJR1QgY2FuIHN0b3JlL3JldHJpZXZlIGZpbHRlcnMgcGFzc2VkIGJ5IHVzZXIgdXNpbmcgJy0t ZGV2aWNlJyBhcmdzLgorICovCisKK2Jvb2wgaWd0X2RldmljZV9pc19maWx0ZXJfc2V0KHZvaWQp Owordm9pZCBpZ3RfZGV2aWNlX2ZpbHRlcl9zZXQoY29uc3QgY2hhciAqZmlsdGVyKTsKK3ZvaWQg aWd0X2RldmljZV9maWx0ZXJfZnJlZSh2b2lkKTsKK2NvbnN0IGNoYXIgKmlndF9kZXZpY2VfZmls dGVyX2dldCh2b2lkKTsKKworLyogVXNlIGZpbHRlciB0byBtYXRjaCB0aGUgZGV2aWNlIGFuZCBm aWxsIGNhcmQgc3RydWN0dXJlICovCitib29sIGlndF9kZXZpY2VfY2FyZF9tYXRjaChjb25zdCBj aGFyICpmaWx0ZXIsIHN0cnVjdCBpZ3RfZGV2aWNlX2NhcmQgKmNhcmQpOworCitpbnQgaWd0X29w ZW5fY2FyZChzdHJ1Y3QgaWd0X2RldmljZV9jYXJkICpjYXJkKTsKK2ludCBpZ3Rfb3Blbl9yZW5k ZXIoc3RydWN0IGlndF9kZXZpY2VfY2FyZCAqY2FyZCk7CisKKyNlbmRpZiAvKiBfX0lHVF9ERVZJ Q0VfU0NBTl9IX18gKi8KZGlmZiAtLWdpdCBhL2xpYi9tZXNvbi5idWlsZCBiL2xpYi9tZXNvbi5i dWlsZAppbmRleCAzZjkwODkxMi4uNjJkNjE2NTQgMTAwNjQ0Ci0tLSBhL2xpYi9tZXNvbi5idWls ZAorKysgYi9saWIvbWVzb24uYnVpbGQKQEAgLTEwLDYgKzEwLDcgQEAgbGliX3NvdXJjZXMgPSBb CiAJJ2lndF9jb2xvcl9lbmNvZGluZy5jJywKIAknaWd0X2RlYnVnZnMuYycsCiAJJ2lndF9kZXZp Y2UuYycsCisJJ2lndF9kZXZpY2Vfc2Nhbi5jJywKIAknaWd0X2F1eC5jJywKIAknaWd0X2d0LmMn LAogCSdpZ3RfaGFsZmZsb2F0LmMnLAotLSAKMi4yMy4wCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2lndC1kZXY=