From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lj1-x242.google.com (mail-lj1-x242.google.com [IPv6:2a00:1450:4864:20::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9EAF389885 for ; Tue, 21 Apr 2020 16:17:32 +0000 (UTC) Received: by mail-lj1-x242.google.com with SMTP id g4so6480531ljl.2 for ; Tue, 21 Apr 2020 09:17:32 -0700 (PDT) From: Juha-Pekka Heikkila Date: Tue, 21 Apr 2020 19:17:18 +0300 Message-Id: <20200421161725.12249-2-juhapekka.heikkila@gmail.com> In-Reply-To: <20200421161725.12249-1-juhapekka.heikkila@gmail.com> References: <20200421161725.12249-1-juhapekka.heikkila@gmail.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 1/8] lib/params: add igt_params.c for module parameter access 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: Jani Nikula List-ID: RnJvbTogSmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGludGVsLmNvbT4KCldlIGhhdmUgZ2VuZXJp YyBoZWxwZXJzIGZvciBzeXNmcyBhY2Nlc3MgaW4gaWd0X3N5c2ZzLmMsIGJ1dCB3ZSBhbHNvCmhh dmUgYSBudW1iZXIgb2YgbW9kdWxlIHBhcmFtZXRlciBhY2Nlc3Mgc3BlY2lmaWMgaGVscGVycyBz Y2F0dGVyZWQgaGVyZQphbmQgdGhlcmUuIFN0YXJ0IGdhdGhlcmluZyB0aGUgbGF0dGVyIGludG8g YSBmaWxlIG9mIGl0cyBvd24uCgpGb3IgaTkxNSwgdGhlIGxvbmctdGVybSBnb2FsIGlzIHRvIG1p Z3JhdGUgZnJvbSBtb2R1bGUgcGFyYW1ldGVycyB0bwpkZXZpY2Ugc3BlY2lmaWMgZGVidWdmcyBw YXJhbWV0ZXJzLiBXaXRoIGFsbCBpZ3QgbW9kdWxlIHBhcmFtIGFjY2VzcwpjZW50cmFsaXplZCBp biBvbmUgcGxhY2UsIHdlIGNhbiBtYWtlIHRoZSB0cmFuc2l0aW9uIG11Y2ggZWFzaWVyLgoKU2ln bmVkLW9mZi1ieTogSmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGludGVsLmNvbT4KU2lnbmVkLW9m Zi1ieTogSnVoYS1QZWtrYSBIZWlra2lsYSA8anVoYXBla2thLmhlaWtraWxhQGdtYWlsLmNvbT4K LS0tCiBsaWIvTWFrZWZpbGUuc291cmNlcyAgICAgICAgICAgICB8ICAgMiArCiBsaWIvaTkxNS9n ZW1fc3VibWlzc2lvbi5jICAgICAgICB8ICAgMSArCiBsaWIvaWd0LmggICAgICAgICAgICAgICAg ICAgICAgICB8ICAgMSArCiBsaWIvaWd0X2F1eC5jICAgICAgICAgICAgICAgICAgICB8IDE0MyAr LS0tLS0tLS0tLS0tLS0tLS0KIGxpYi9pZ3RfYXV4LmggICAgICAgICAgICAgICAgICAgIHwgICAz IC0KIGxpYi9pZ3RfZ3QuYyAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGxpYi9pZ3RfcGFy YW1zLmMgICAgICAgICAgICAgICAgIHwgMjQ0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKIGxpYi9pZ3RfcGFyYW1zLmggICAgICAgICAgICAgICAgIHwgIDM4ICsrKysrCiBsaWIvaWd0 X3Bzci5jICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBsaWIvaWd0X3N5c2ZzLmMgICAgICAg ICAgICAgICAgICB8ICA2OCAtLS0tLS0tLS0KIGxpYi9pZ3Rfc3lzZnMuaCAgICAgICAgICAgICAg ICAgIHwgICA1IC0KIGxpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgIHwgICAxICsKIHRl c3RzL2k5MTUvZ2VtX2N0eF9wZXJzaXN0ZW5jZS5jIHwgICAxICsKIDEzIGZpbGVzIGNoYW5nZWQs IDI5MSBpbnNlcnRpb25zKCspLCAyMTggZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg bGliL2lndF9wYXJhbXMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pZ3RfcGFyYW1zLmgKCmRp ZmYgLS1naXQgYS9saWIvTWFrZWZpbGUuc291cmNlcyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCmlu ZGV4IDFlMmM4OGFlLi4yZWFkOWQwMiAxMDA2NDQKLS0tIGEvbGliL01ha2VmaWxlLnNvdXJjZXMK KysrIGIvbGliL01ha2VmaWxlLnNvdXJjZXMKQEAgLTQ3LDYgKzQ3LDggQEAgbGliX3NvdXJjZV9s aXN0ID0JIAlcCiAJaWd0X2xpc3QuaAkJXAogCWlndF9tYXRyaXguYwkJXAogCWlndF9tYXRyaXgu aAkJXAorCWlndF9wYXJhbXMuYwkJXAorCWlndF9wYXJhbXMuaAkJXAogCWlndF9wcmltZXMuYwkJ XAogCWlndF9wcmltZXMuaAkJXAogCWlndF9yYW5kLmMJCVwKZGlmZiAtLWdpdCBhL2xpYi9pOTE1 L2dlbV9zdWJtaXNzaW9uLmMgYi9saWIvaTkxNS9nZW1fc3VibWlzc2lvbi5jCmluZGV4IDcyZGUw YzIyLi5iYjU4YTIwNyAxMDA2NDQKLS0tIGEvbGliL2k5MTUvZ2VtX3N1Ym1pc3Npb24uYworKysg Yi9saWIvaTkxNS9nZW1fc3VibWlzc2lvbi5jCkBAIC0zMiw2ICszMiw3IEBACiAKICNpbmNsdWRl ICJpZ3RfY29yZS5oIgogI2luY2x1ZGUgImlndF9ndC5oIgorI2luY2x1ZGUgImlndF9wYXJhbXMu aCIKICNpbmNsdWRlICJpZ3Rfc3lzZnMuaCIKICNpbmNsdWRlICJpbnRlbF9jaGlwc2V0LmgiCiAj aW5jbHVkZSAiaW50ZWxfcmVnLmgiCmRpZmYgLS1naXQgYS9saWIvaWd0LmggYi9saWIvaWd0LmgK aW5kZXggYTZjNGU0NGQuLjBiZjk4YWE1IDEwMDY0NAotLS0gYS9saWIvaWd0LmgKKysrIGIvbGli L2lndC5oCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiaWd0X2ZyYW1lLmgiCiAjaW5jbHVk ZSAiaWd0X2d0LmgiCiAjaW5jbHVkZSAiaWd0X2ttcy5oIgorI2luY2x1ZGUgImlndF9wYXJhbXMu aCIKICNpbmNsdWRlICJpZ3RfcG0uaCIKICNpbmNsdWRlICJpZ3Rfc3RhdHMuaCIKICNpZmRlZiBI QVZFX0NIQU1FTElVTQpkaWZmIC0tZ2l0IGEvbGliL2lndF9hdXguYyBiL2xpYi9pZ3RfYXV4LmMK aW5kZXggZWNhYjVkOTkuLmM1NWIyOTE2IDEwMDY0NAotLS0gYS9saWIvaWd0X2F1eC5jCisrKyBi L2xpYi9pZ3RfYXV4LmMKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlICJpZ3RfYXV4LmgiCiAj aW5jbHVkZSAiaWd0X2RlYnVnZnMuaCIKICNpbmNsdWRlICJpZ3RfZ3QuaCIKKyNpbmNsdWRlICJp Z3RfcGFyYW1zLmgiCiAjaW5jbHVkZSAiaWd0X3JhbmQuaCIKICNpbmNsdWRlICJpZ3Rfc3lzZnMu aCIKICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTExMTYsMTQ4ICsxMTE3LDYgQEAgdm9pZCBpZ3Rf dW5sb2NrX21lbSh2b2lkKQogCWxvY2tlZF9tZW0gPSBOVUxMOwogfQogCi0KLSNkZWZpbmUgTU9E VUxFX1BBUkFNX0RJUiAiL3N5cy9tb2R1bGUvaTkxNS9wYXJhbWV0ZXJzLyIKLSNkZWZpbmUgUEFS QU1fTkFNRV9NQVhfU1ogMzIKLSNkZWZpbmUgUEFSQU1fVkFMVUVfTUFYX1NaIDE2Ci0jZGVmaW5l IFBBUkFNX0ZJTEVfUEFUSF9NQVhfU1ogKHN0cmxlbihNT0RVTEVfUEFSQU1fRElSKSArIFBBUkFN X05BTUVfTUFYX1NaKQotCi1zdHJ1Y3QgbW9kdWxlX3BhcmFtX2RhdGEgewotCWNoYXIgbmFtZVtQ QVJBTV9OQU1FX01BWF9TWl07Ci0JY2hhciBvcmlnaW5hbF92YWx1ZVtQQVJBTV9WQUxVRV9NQVhf U1pdOwotCi0Jc3RydWN0IG1vZHVsZV9wYXJhbV9kYXRhICpuZXh0OwotfTsKLXN0cnVjdCBtb2R1 bGVfcGFyYW1fZGF0YSAqbW9kdWxlX3BhcmFtcyA9IE5VTEw7Ci0KLXN0YXRpYyB2b2lkIGlndF9t b2R1bGVfcGFyYW1fZXhpdF9oYW5kbGVyKGludCBzaWcpCi17Ci0JY29uc3Qgc2l6ZV90IGRpcl9s ZW4gPSBzdHJsZW4oTU9EVUxFX1BBUkFNX0RJUik7Ci0JY2hhciBmaWxlX3BhdGhbUEFSQU1fRklM RV9QQVRIX01BWF9TWl07Ci0Jc3RydWN0IG1vZHVsZV9wYXJhbV9kYXRhICpkYXRhOwotCWludCBm ZDsKLQotCS8qIFdlIGRvbid0IG5lZWQgdG8gYXNzZXJ0IHN0cmluZyBzaXplcyBvbiB0aGlzIGZ1 bmN0aW9uIHNpbmNlIHRoZXkgd2VyZQotCSAqIGFscmVhZHkgY2hlY2tlZCBiZWZvcmUgYmVpbmcg c3RvcmVkIG9uIHRoZSBsaXN0cy4gQmVzaWRlcywKLQkgKiBpZ3RfYXNzZXJ0KCkgaXMgbm90IEFT LVNhZmUuICovCi0Jc3RyY3B5KGZpbGVfcGF0aCwgTU9EVUxFX1BBUkFNX0RJUik7Ci0KLQlmb3Ig KGRhdGEgPSBtb2R1bGVfcGFyYW1zOyBkYXRhICE9IE5VTEw7IGRhdGEgPSBkYXRhLT5uZXh0KSB7 Ci0JCXN0cmNweShmaWxlX3BhdGggKyBkaXJfbGVuLCBkYXRhLT5uYW1lKTsKLQotCQlmZCA9IG9w ZW4oZmlsZV9wYXRoLCBPX1JEV1IpOwotCQlpZiAoZmQgPj0gMCkgewotCQkJaW50IHNpemUgPSBz dHJsZW4gKGRhdGEtPm9yaWdpbmFsX3ZhbHVlKTsKLQotCQkJaWYgKHNpemUgIT0gd3JpdGUoZmQs IGRhdGEtPm9yaWdpbmFsX3ZhbHVlLCBzaXplKSkgewotCQkJCWNvbnN0IGNoYXIgbXNnW10gPSAi V0FSTklORzogTW9kdWxlIHBhcmFtZXRlcnMgIgotCQkJCQkibWF5IG5vdCBoYXZlIGJlZW4gcmVz ZXQgdG8gdGhlaXIgIgotCQkJCQkib3JpZ2luYWwgdmFsdWVzXG4iOwotCQkJCWFzc2VydCh3cml0 ZShTVERFUlJfRklMRU5PLCBtc2csIHNpemVvZihtc2cpKQotCQkJCSAgICAgICA9PSBzaXplb2Yo bXNnKSk7Ci0JCQl9Ci0KLQkJCWNsb3NlKGZkKTsKLQkJfQotCX0KLQkvKiBmcmVlKCkgaXMgbm90 IEFTLVNhZmUsIHNvIHdlIGNhbid0IGNhbGwgaXQgaGVyZS4gKi8KLX0KLQotLyoqCi0gKiBpZ3Rf c2F2ZV9tb2R1bGVfcGFyYW06Ci0gKiBAbmFtZTogbmFtZSBvZiB0aGUgaTkxNS5rbyBtb2R1bGUg cGFyYW1ldGVyCi0gKiBAZmlsZV9wYXRoOiBmdWxsIHN5c2ZzIGZpbGUgcGF0aCBmb3IgdGhlIHBh cmFtZXRlcgotICoKLSAqIFJlYWRzIHRoZSBjdXJyZW50IHZhbHVlIG9mIGFuIGk5MTUua28gbW9k dWxlIHBhcmFtZXRlciwgc2F2ZXMgaXQgb24gYW4gYXJyYXksCi0gKiB0aGVuIGluc3RhbGxzIGFu IGV4aXQgaGFuZGxlciB0byByZXN0b3JlIGl0IHdoZW4gdGhlIHByb2dyYW0gZXhpdHMuCi0gKgot ICogSXQgaXMgc2FmZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gbXVsdGlwbGUgdGltZXMgZm9yIHRo ZSBzYW1lIHBhcmFtZXRlci4KLSAqCi0gKiBOb3RpY2UgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGNh bGxlZCBieSBpZ3Rfc2V0X21vZHVsZV9wYXJhbSgpLCBzbyB0aGF0IG9uZSAtCi0gKiBvciBvbmUg b2YgaXRzIHdyYXBwZXJzIC0gaXMgdGhlIG9ubHkgZnVuY3Rpb24gdGhlIHRlc3QgcHJvZ3JhbXMg bmVlZCB0byBjYWxsLgotICovCi1zdGF0aWMgdm9pZCBpZ3Rfc2F2ZV9tb2R1bGVfcGFyYW0oY29u c3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZmlsZV9wYXRoKQotewotCXN0cnVjdCBtb2R1bGVf cGFyYW1fZGF0YSAqZGF0YTsKLQlzaXplX3QgbjsKLQlpbnQgZmQ7Ci0KLQkvKiBDaGVjayBpZiB0 aGlzIHBhcmFtZXRlciBpcyBhbHJlYWR5IHNhdmVkLiAqLwotCWZvciAoZGF0YSA9IG1vZHVsZV9w YXJhbXM7IGRhdGEgIT0gTlVMTDsgZGF0YSA9IGRhdGEtPm5leHQpCi0JCWlmIChzdHJuY21wKGRh dGEtPm5hbWUsIG5hbWUsIFBBUkFNX05BTUVfTUFYX1NaKSA9PSAwKQotCQkJcmV0dXJuOwotCi0J aWYgKCFtb2R1bGVfcGFyYW1zKQotCQlpZ3RfaW5zdGFsbF9leGl0X2hhbmRsZXIoaWd0X21vZHVs ZV9wYXJhbV9leGl0X2hhbmRsZXIpOwotCi0JZGF0YSA9IGNhbGxvYygxLCBzaXplb2YgKCpkYXRh KSk7Ci0JaWd0X2Fzc2VydChkYXRhKTsKLQotCXN0cm5jcHkoZGF0YS0+bmFtZSwgbmFtZSwgUEFS QU1fTkFNRV9NQVhfU1ogLSAxKTsKLQotCWZkID0gb3BlbihmaWxlX3BhdGgsIE9fUkRPTkxZKTsK LQlpZ3RfYXNzZXJ0KGZkID49IDApOwotCi0JbiA9IHJlYWQoZmQsIGRhdGEtPm9yaWdpbmFsX3Zh bHVlLCBQQVJBTV9WQUxVRV9NQVhfU1opOwotCWlndF9hc3NlcnRfZihuID4gMCAmJiBuIDwgUEFS QU1fVkFMVUVfTUFYX1NaLAotCQkgICAgICJOZWVkIHRvIGluY3JlYXNlIFBBUkFNX1ZBTFVFX01B WF9TWlxuIik7Ci0KLQlpZ3RfYXNzZXJ0KGNsb3NlKGZkKSA9PSAwKTsKLQotCWRhdGEtPm5leHQg PSBtb2R1bGVfcGFyYW1zOwotCW1vZHVsZV9wYXJhbXMgPSBkYXRhOwotfQotCi0vKioKLSAqIGln dF9zZXRfbW9kdWxlX3BhcmFtOgotICogQG5hbWU6IGk5MTUua28gcGFyYW1ldGVyIG5hbWUKLSAq IEB2YWw6IGk5MTUua28gcGFyYW1ldGVyIHZhbHVlCi0gKgotICogVGhpcyBmdW5jdGlvbiBzZXRz IHRoZSBkZXNpcmVkIHZhbHVlIGZvciB0aGUgZ2l2ZW4gaTkxNS5rbyBwYXJhbWV0ZXIuIEl0IGFs c28KLSAqIHRha2VzIGNhcmUgb2Ygc2F2aW5nIGFuZCByZXN0b3JpbmcgdGhlIHZhbHVlcyB0aGF0 IHdlcmUgYWxyZWFkeSBzZXQgYmVmb3JlCi0gKiB0aGUgdGVzdCB3YXMgcnVuLgotICoKLSAqIFBs ZWFzZSBjb25zaWRlciB1c2luZyBpZ3Rfc2V0X21vZHVsZV9wYXJhbV9pbnQoKSBmb3IgdGhlIGlu dGVnZXIgYW5kIGJvb2wKLSAqIHBhcmFtZXRlcnMuCi0gKi8KLXZvaWQgaWd0X3NldF9tb2R1bGVf cGFyYW0oY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsKQotewotCWNoYXIgZmlsZV9w YXRoW1BBUkFNX0ZJTEVfUEFUSF9NQVhfU1pdOwotCXNpemVfdCBsZW4gPSBzdHJsZW4odmFsKTsK LQlpbnQgZmQ7Ci0KLQlpZ3RfYXNzZXJ0X2Yoc3RybGVuKG5hbWUpIDwgUEFSQU1fTkFNRV9NQVhf U1osCi0JCSAgICAgIk5lZWQgdG8gaW5jcmVhc2UgUEFSQU1fTkFNRV9NQVhfU1pcbiIpOwotCXN0 cmNweShmaWxlX3BhdGgsIE1PRFVMRV9QQVJBTV9ESVIpOwotCXN0cmNweShmaWxlX3BhdGggKyBz dHJsZW4oTU9EVUxFX1BBUkFNX0RJUiksIG5hbWUpOwotCi0JaWd0X3NhdmVfbW9kdWxlX3BhcmFt KG5hbWUsIGZpbGVfcGF0aCk7Ci0KLQlmZCA9IG9wZW4oZmlsZV9wYXRoLCBPX1JEV1IpOwotCWln dF9hc3NlcnQod3JpdGUoZmQsIHZhbCwgbGVuKSA9PSBsZW4pOwotCWlndF9hc3NlcnQoY2xvc2Uo ZmQpID09IDApOwotfQotCi0vKioKLSAqIGlndF9zZXRfbW9kdWxlX3BhcmFtX2ludDoKLSAqIEBu YW1lOiBpOTE1LmtvIHBhcmFtZXRlciBuYW1lCi0gKiBAdmFsOiBpOTE1LmtvIHBhcmFtZXRlciB2 YWx1ZQotICoKLSAqIFRoaXMgaXMgYSB3cmFwcGVyIGZvciBpZ3Rfc2V0X21vZHVsZV9wYXJhbSgp IHRoYXQgdGFrZXMgYW4gaW50ZWdlciBpbnN0ZWFkIG9mCi0gKiBhIHN0cmluZy4gUGxlYXNlIHNl ZSBpZ3Rfc2V0X21vZHVsZV9wYXJhbSgpLgotICovCi12b2lkIGlndF9zZXRfbW9kdWxlX3BhcmFt X2ludChjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsKQotewotCWNoYXIgc3RyW1BBUkFNX1ZBTFVF X01BWF9TWl07Ci0JaW50IG47Ci0KLQluID0gc25wcmludGYoc3RyLCBQQVJBTV9WQUxVRV9NQVhf U1osICIlZFxuIiwgdmFsKTsKLQlpZ3RfYXNzZXJ0X2YobiA8IFBBUkFNX1ZBTFVFX01BWF9TWiwK LQkJICAgICAiTmVlZCB0byBpbmNyZWFzZSBQQVJBTV9WQUxVRV9NQVhfU1pcbiIpOwotCi0JaWd0 X3NldF9tb2R1bGVfcGFyYW0obmFtZSwgc3RyKTsKLX0KLQogLyoqCiAgKiBpZ3RfaXNfcHJvY2Vz c19ydW5uaW5nOgogICogQGNvbW06IE5hbWUgb2YgcHJvY2VzcyBpbiB0aGUgZm9ybSBmb3VuZCBp biAvcHJvYy9waWQvY29tbSAobGltaXRlZCB0byAxNQpkaWZmIC0tZ2l0IGEvbGliL2lndF9hdXgu aCBiL2xpYi9pZ3RfYXV4LmgKaW5kZXggMDRkMjI5MDQuLmJmNTdjY2Y1IDEwMDY0NAotLS0gYS9s aWIvaWd0X2F1eC5oCisrKyBiL2xpYi9pZ3RfYXV4LmgKQEAgLTI4NSw5ICsyODUsNiBAQCBkb3Vi bGUgaWd0X3N0b3Bfc2lnbGF0ZW5jeShzdHJ1Y3QgaWd0X21lYW4gKnJlc3VsdCk7CiAKIGJvb2wg aWd0X2FsbG93X3VubGltaXRlZF9maWxlcyh2b2lkKTsKIAotdm9pZCBpZ3Rfc2V0X21vZHVsZV9w YXJhbShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWwpOwotdm9pZCBpZ3Rfc2V0X21v ZHVsZV9wYXJhbV9pbnQoY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbCk7Ci0KIGludCBpZ3RfaXNf cHJvY2Vzc19ydW5uaW5nKGNvbnN0IGNoYXIgKmNvbW0pOwogaW50IGlndF90ZXJtaW5hdGVfcHJv Y2VzcyhpbnQgc2lnLCBjb25zdCBjaGFyICpjb21tKTsKIHZvaWQgaWd0X2xzb2YoY29uc3QgY2hh ciAqZHBhdGgpOwpkaWZmIC0tZ2l0IGEvbGliL2lndF9ndC5jIGIvbGliL2lndF9ndC5jCmluZGV4 IDI1NmM3Y2JjLi4yMjM0MGEzZCAxMDA2NDQKLS0tIGEvbGliL2lndF9ndC5jCisrKyBiL2xpYi9p Z3RfZ3QuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgImlndF9hdXguaCIKICNpbmNsdWRl ICJpZ3RfY29yZS5oIgogI2luY2x1ZGUgImlndF9ndC5oIgorI2luY2x1ZGUgImlndF9wYXJhbXMu aCIKICNpbmNsdWRlICJpZ3Rfc3lzZnMuaCIKICNpbmNsdWRlICJpZ3RfZGVidWdmcy5oIgogI2lu Y2x1ZGUgImlvY3RsX3dyYXBwZXJzLmgiCmRpZmYgLS1naXQgYS9saWIvaWd0X3BhcmFtcy5jIGIv bGliL2lndF9wYXJhbXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNGJk MmIxZjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvaWd0X3BhcmFtcy5jCkBAIC0wLDAgKzEsMjQ0 IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K KyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0 cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoK KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgor ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9N LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S IE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGFz c2VydC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVk ZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+ CisKKyNpbmNsdWRlIDxpOTE1X2RybS5oPgorCisjaW5jbHVkZSAiaWd0X2NvcmUuaCIKKyNpbmNs dWRlICJpZ3RfcGFyYW1zLmgiCisjaW5jbHVkZSAiaWd0X3N5c2ZzLmgiCisKKyNkZWZpbmUgTU9E VUxFX1BBUkFNX0RJUiAiL3N5cy9tb2R1bGUvaTkxNS9wYXJhbWV0ZXJzLyIKKyNkZWZpbmUgUEFS QU1fTkFNRV9NQVhfU1ogMzIKKyNkZWZpbmUgUEFSQU1fVkFMVUVfTUFYX1NaIDE2CisjZGVmaW5l IFBBUkFNX0ZJTEVfUEFUSF9NQVhfU1ogKHN0cmxlbihNT0RVTEVfUEFSQU1fRElSKSArIFBBUkFN X05BTUVfTUFYX1NaKQorCitzdHJ1Y3QgbW9kdWxlX3BhcmFtX2RhdGEgeworCWNoYXIgbmFtZVtQ QVJBTV9OQU1FX01BWF9TWl07CisJY2hhciBvcmlnaW5hbF92YWx1ZVtQQVJBTV9WQUxVRV9NQVhf U1pdOworCisJc3RydWN0IG1vZHVsZV9wYXJhbV9kYXRhICpuZXh0OworfTsKK3N0cnVjdCBtb2R1 bGVfcGFyYW1fZGF0YSAqbW9kdWxlX3BhcmFtcyA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIGlndF9t b2R1bGVfcGFyYW1fZXhpdF9oYW5kbGVyKGludCBzaWcpCit7CisJY29uc3Qgc2l6ZV90IGRpcl9s ZW4gPSBzdHJsZW4oTU9EVUxFX1BBUkFNX0RJUik7CisJY2hhciBmaWxlX3BhdGhbUEFSQU1fRklM RV9QQVRIX01BWF9TWl07CisJc3RydWN0IG1vZHVsZV9wYXJhbV9kYXRhICpkYXRhOworCWludCBm ZDsKKworCS8qIFdlIGRvbid0IG5lZWQgdG8gYXNzZXJ0IHN0cmluZyBzaXplcyBvbiB0aGlzIGZ1 bmN0aW9uIHNpbmNlIHRoZXkgd2VyZQorCSAqIGFscmVhZHkgY2hlY2tlZCBiZWZvcmUgYmVpbmcg c3RvcmVkIG9uIHRoZSBsaXN0cy4gQmVzaWRlcywKKwkgKiBpZ3RfYXNzZXJ0KCkgaXMgbm90IEFT LVNhZmUuICovCisJc3RyY3B5KGZpbGVfcGF0aCwgTU9EVUxFX1BBUkFNX0RJUik7CisKKwlmb3Ig KGRhdGEgPSBtb2R1bGVfcGFyYW1zOyBkYXRhICE9IE5VTEw7IGRhdGEgPSBkYXRhLT5uZXh0KSB7 CisJCXN0cmNweShmaWxlX3BhdGggKyBkaXJfbGVuLCBkYXRhLT5uYW1lKTsKKworCQlmZCA9IG9w ZW4oZmlsZV9wYXRoLCBPX1JEV1IpOworCQlpZiAoZmQgPj0gMCkgeworCQkJaW50IHNpemUgPSBz dHJsZW4gKGRhdGEtPm9yaWdpbmFsX3ZhbHVlKTsKKworCQkJaWYgKHNpemUgIT0gd3JpdGUoZmQs IGRhdGEtPm9yaWdpbmFsX3ZhbHVlLCBzaXplKSkgeworCQkJCWNvbnN0IGNoYXIgbXNnW10gPSAi V0FSTklORzogTW9kdWxlIHBhcmFtZXRlcnMgIgorCQkJCQkibWF5IG5vdCBoYXZlIGJlZW4gcmVz ZXQgdG8gdGhlaXIgIgorCQkJCQkib3JpZ2luYWwgdmFsdWVzXG4iOworCQkJCWFzc2VydCh3cml0 ZShTVERFUlJfRklMRU5PLCBtc2csIHNpemVvZihtc2cpKQorCQkJCSAgICAgICA9PSBzaXplb2Yo bXNnKSk7CisJCQl9CisKKwkJCWNsb3NlKGZkKTsKKwkJfQorCX0KKwkvKiBmcmVlKCkgaXMgbm90 IEFTLVNhZmUsIHNvIHdlIGNhbid0IGNhbGwgaXQgaGVyZS4gKi8KK30KKworLyoqCisgKiBpZ3Rf c2F2ZV9tb2R1bGVfcGFyYW06CisgKiBAbmFtZTogbmFtZSBvZiB0aGUgaTkxNS5rbyBtb2R1bGUg cGFyYW1ldGVyCisgKiBAZmlsZV9wYXRoOiBmdWxsIHN5c2ZzIGZpbGUgcGF0aCBmb3IgdGhlIHBh cmFtZXRlcgorICoKKyAqIFJlYWRzIHRoZSBjdXJyZW50IHZhbHVlIG9mIGFuIGk5MTUua28gbW9k dWxlIHBhcmFtZXRlciwgc2F2ZXMgaXQgb24gYW4gYXJyYXksCisgKiB0aGVuIGluc3RhbGxzIGFu IGV4aXQgaGFuZGxlciB0byByZXN0b3JlIGl0IHdoZW4gdGhlIHByb2dyYW0gZXhpdHMuCisgKgor ICogSXQgaXMgc2FmZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gbXVsdGlwbGUgdGltZXMgZm9yIHRo ZSBzYW1lIHBhcmFtZXRlci4KKyAqCisgKiBOb3RpY2UgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGNh bGxlZCBieSBpZ3Rfc2V0X21vZHVsZV9wYXJhbSgpLCBzbyB0aGF0IG9uZSAtCisgKiBvciBvbmUg b2YgaXRzIHdyYXBwZXJzIC0gaXMgdGhlIG9ubHkgZnVuY3Rpb24gdGhlIHRlc3QgcHJvZ3JhbXMg bmVlZCB0byBjYWxsLgorICovCitzdGF0aWMgdm9pZCBpZ3Rfc2F2ZV9tb2R1bGVfcGFyYW0oY29u c3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZmlsZV9wYXRoKQoreworCXN0cnVjdCBtb2R1bGVf cGFyYW1fZGF0YSAqZGF0YTsKKwlzaXplX3QgbjsKKwlpbnQgZmQ7CisKKwkvKiBDaGVjayBpZiB0 aGlzIHBhcmFtZXRlciBpcyBhbHJlYWR5IHNhdmVkLiAqLworCWZvciAoZGF0YSA9IG1vZHVsZV9w YXJhbXM7IGRhdGEgIT0gTlVMTDsgZGF0YSA9IGRhdGEtPm5leHQpCisJCWlmIChzdHJuY21wKGRh dGEtPm5hbWUsIG5hbWUsIFBBUkFNX05BTUVfTUFYX1NaKSA9PSAwKQorCQkJcmV0dXJuOworCisJ aWYgKCFtb2R1bGVfcGFyYW1zKQorCQlpZ3RfaW5zdGFsbF9leGl0X2hhbmRsZXIoaWd0X21vZHVs ZV9wYXJhbV9leGl0X2hhbmRsZXIpOworCisJZGF0YSA9IGNhbGxvYygxLCBzaXplb2YgKCpkYXRh KSk7CisJaWd0X2Fzc2VydChkYXRhKTsKKworCXN0cm5jcHkoZGF0YS0+bmFtZSwgbmFtZSwgUEFS QU1fTkFNRV9NQVhfU1ogLSAxKTsKKworCWZkID0gb3BlbihmaWxlX3BhdGgsIE9fUkRPTkxZKTsK KwlpZ3RfYXNzZXJ0KGZkID49IDApOworCisJbiA9IHJlYWQoZmQsIGRhdGEtPm9yaWdpbmFsX3Zh bHVlLCBQQVJBTV9WQUxVRV9NQVhfU1opOworCWlndF9hc3NlcnRfZihuID4gMCAmJiBuIDwgUEFS QU1fVkFMVUVfTUFYX1NaLAorCQkgICAgICJOZWVkIHRvIGluY3JlYXNlIFBBUkFNX1ZBTFVFX01B WF9TWlxuIik7CisKKwlpZ3RfYXNzZXJ0KGNsb3NlKGZkKSA9PSAwKTsKKworCWRhdGEtPm5leHQg PSBtb2R1bGVfcGFyYW1zOworCW1vZHVsZV9wYXJhbXMgPSBkYXRhOworfQorCisvKioKKyAqIGln dF9zeXNmc19vcGVuX3BhcmFtZXRlcnM6CisgKiBAZGV2aWNlOiBmZCBvZiB0aGUgZGV2aWNlCisg KgorICogVGhpcyBvcGVucyB0aGUgbW9kdWxlIHBhcmFtZXRlcnMgZGlyZWN0b3J5ICh1bmRlciBz eXNmcykgY29ycmVzcG9uZGluZworICogdG8gdGhlIGRldmljZSBmb3IgdXNlIHdpdGggaWd0X3N5 c2ZzX3NldCgpIGFuZCBpZ3Rfc3lzZnNfZ2V0KCkuCisgKgorICogUmV0dXJuczoKKyAqIFRoZSBk aXJlY3RvcnkgZmQsIG9yIC0xIG9uIGZhaWx1cmUuCisgKi8KK2ludCBpZ3Rfc3lzZnNfb3Blbl9w YXJhbWV0ZXJzKGludCBkZXZpY2UpCit7CisJaW50IGRpciwgcGFyYW1zID0gLTE7CisKKwlkaXIg PSBpZ3Rfc3lzZnNfb3BlbihkZXZpY2UpOworCWlmIChkaXIgPj0gMCkgeworCQlwYXJhbXMgPSBv cGVuYXQoZGlyLAorCQkJCSJkZXZpY2UvZHJpdmVyL21vZHVsZS9wYXJhbWV0ZXJzIiwKKwkJCQlP X1JET05MWSk7CisJCWNsb3NlKGRpcik7CisJfQorCisJaWYgKHBhcmFtcyA8IDApIHsgLyogYnVp bHRpbj8gKi8KKwkJZHJtX3ZlcnNpb25fdCB2ZXJzaW9uOworCQljaGFyIG5hbWVbMzJdID0gIiI7 CisJCWNoYXIgcGF0aFtQQVRIX01BWF07CisKKwkJbWVtc2V0KCZ2ZXJzaW9uLCAwLCBzaXplb2Yo dmVyc2lvbikpOworCQl2ZXJzaW9uLm5hbWVfbGVuID0gc2l6ZW9mKG5hbWUpOworCQl2ZXJzaW9u Lm5hbWUgPSBuYW1lOworCQlpb2N0bChkZXZpY2UsIERSTV9JT0NUTF9WRVJTSU9OLCAmdmVyc2lv bik7CisKKwkJc3ByaW50ZihwYXRoLCAiL3N5cy9tb2R1bGUvJXMvcGFyYW1ldGVycyIsIG5hbWUp OworCQlwYXJhbXMgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKKwl9CisKKwlyZXR1cm4gcGFyYW1z OworfQorCisvKioKKyAqIGlndF9zeXNmc19zZXRfcGFyYW1ldGVyczoKKyAqIEBkZXZpY2U6IGZk IG9mIHRoZSBkZXZpY2UKKyAqIEBwYXJhbWV0ZXI6IHRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIg dG8gc2V0CisgKiBAZm10OiBwcmludGYtZXNxdWUgZm9ybWF0IHN0cmluZworICoKKyAqIFJldHVy bnMgdHJ1ZSBvbiBzdWNjZXNzCisgKi8KK2Jvb2wgaWd0X3N5c2ZzX3NldF9wYXJhbWV0ZXIoaW50 IGRldmljZSwKKwkJCSAgICAgY29uc3QgY2hhciAqcGFyYW1ldGVyLAorCQkJICAgICBjb25zdCBj aGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWludCBkaXI7CisJaW50IHJldDsKKwor CWRpciA9IGlndF9zeXNmc19vcGVuX3BhcmFtZXRlcnMoZGV2aWNlKTsKKwlpZiAoZGlyIDwgMCkK KwkJcmV0dXJuIGZhbHNlOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gaWd0X3N5c2Zz X3ZwcmludGYoZGlyLCBwYXJhbWV0ZXIsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwljbG9z ZShkaXIpOworCisJcmV0dXJuIHJldCA+IDA7Cit9CisKKy8qKgorICogaWd0X3NldF9tb2R1bGVf cGFyYW06CisgKiBAbmFtZTogaTkxNS5rbyBwYXJhbWV0ZXIgbmFtZQorICogQHZhbDogaTkxNS5r byBwYXJhbWV0ZXIgdmFsdWUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGRlc2lyZWQg dmFsdWUgZm9yIHRoZSBnaXZlbiBpOTE1LmtvIHBhcmFtZXRlci4gSXQgYWxzbworICogdGFrZXMg Y2FyZSBvZiBzYXZpbmcgYW5kIHJlc3RvcmluZyB0aGUgdmFsdWVzIHRoYXQgd2VyZSBhbHJlYWR5 IHNldCBiZWZvcmUKKyAqIHRoZSB0ZXN0IHdhcyBydW4uCisgKgorICogUGxlYXNlIGNvbnNpZGVy IHVzaW5nIGlndF9zZXRfbW9kdWxlX3BhcmFtX2ludCgpIGZvciB0aGUgaW50ZWdlciBhbmQgYm9v bAorICogcGFyYW1ldGVycy4KKyAqLwordm9pZCBpZ3Rfc2V0X21vZHVsZV9wYXJhbShjb25zdCBj aGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWwpCit7CisJY2hhciBmaWxlX3BhdGhbUEFSQU1fRklM RV9QQVRIX01BWF9TWl07CisJc2l6ZV90IGxlbiA9IHN0cmxlbih2YWwpOworCWludCBmZDsKKwor CWlndF9hc3NlcnRfZihzdHJsZW4obmFtZSkgPCBQQVJBTV9OQU1FX01BWF9TWiwKKwkJICAgICAi TmVlZCB0byBpbmNyZWFzZSBQQVJBTV9OQU1FX01BWF9TWlxuIik7CisJc3RyY3B5KGZpbGVfcGF0 aCwgTU9EVUxFX1BBUkFNX0RJUik7CisJc3RyY3B5KGZpbGVfcGF0aCArIHN0cmxlbihNT0RVTEVf UEFSQU1fRElSKSwgbmFtZSk7CisKKwlpZ3Rfc2F2ZV9tb2R1bGVfcGFyYW0obmFtZSwgZmlsZV9w YXRoKTsKKworCWZkID0gb3BlbihmaWxlX3BhdGgsIE9fUkRXUik7CisJaWd0X2Fzc2VydCh3cml0 ZShmZCwgdmFsLCBsZW4pID09IGxlbik7CisJaWd0X2Fzc2VydChjbG9zZShmZCkgPT0gMCk7Cit9 CisKKy8qKgorICogaWd0X3NldF9tb2R1bGVfcGFyYW1faW50OgorICogQG5hbWU6IGk5MTUua28g cGFyYW1ldGVyIG5hbWUKKyAqIEB2YWw6IGk5MTUua28gcGFyYW1ldGVyIHZhbHVlCisgKgorICog VGhpcyBpcyBhIHdyYXBwZXIgZm9yIGlndF9zZXRfbW9kdWxlX3BhcmFtKCkgdGhhdCB0YWtlcyBh biBpbnRlZ2VyIGluc3RlYWQgb2YKKyAqIGEgc3RyaW5nLiBQbGVhc2Ugc2VlIGlndF9zZXRfbW9k dWxlX3BhcmFtKCkuCisgKi8KK3ZvaWQgaWd0X3NldF9tb2R1bGVfcGFyYW1faW50KGNvbnN0IGNo YXIgKm5hbWUsIGludCB2YWwpCit7CisJY2hhciBzdHJbUEFSQU1fVkFMVUVfTUFYX1NaXTsKKwlp bnQgbjsKKworCW4gPSBzbnByaW50ZihzdHIsIFBBUkFNX1ZBTFVFX01BWF9TWiwgIiVkXG4iLCB2 YWwpOworCWlndF9hc3NlcnRfZihuIDwgUEFSQU1fVkFMVUVfTUFYX1NaLAorCQkgICAgICJOZWVk IHRvIGluY3JlYXNlIFBBUkFNX1ZBTFVFX01BWF9TWlxuIik7CisKKwlpZ3Rfc2V0X21vZHVsZV9w YXJhbShuYW1lLCBzdHIpOworfQpkaWZmIC0tZ2l0IGEvbGliL2lndF9wYXJhbXMuaCBiL2xpYi9p Z3RfcGFyYW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmNmMGZkMThm Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2lndF9wYXJhbXMuaApAQCAtMCwwICsxLDM4IEBACisv KgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNs dWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNv cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAq IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO WSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE IFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFM TAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQg T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVS IERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfX0lHVF9QQVJB TVNfSF9fCisjZGVmaW5lIF9fSUdUX1BBUkFNU19IX18KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4K KworaW50IGlndF9zeXNmc19vcGVuX3BhcmFtZXRlcnMoaW50IGRldmljZSk7CisKK19fYXR0cmli dXRlX18oKGZvcm1hdChwcmludGYsIDMsIDQpKSkKK2Jvb2wgaWd0X3N5c2ZzX3NldF9wYXJhbWV0 ZXIoaW50IGRldmljZSwgY29uc3QgY2hhciAqcGFyYW1ldGVyLAorCQkJICAgICBjb25zdCBjaGFy ICpmbXQsIC4uLik7CisKK3ZvaWQgaWd0X3NldF9tb2R1bGVfcGFyYW0oY29uc3QgY2hhciAqbmFt ZSwgY29uc3QgY2hhciAqdmFsKTsKK3ZvaWQgaWd0X3NldF9tb2R1bGVfcGFyYW1faW50KGNvbnN0 IGNoYXIgKm5hbWUsIGludCB2YWwpOworCisjZW5kaWYgLyogX19JR1RfUEFSQU1TX0hfXyAqLwpk aWZmIC0tZ2l0IGEvbGliL2lndF9wc3IuYyBiL2xpYi9pZ3RfcHNyLmMKaW5kZXggODNjY2FjZGQu LjJiY2YxNGVhIDEwMDY0NAotLS0gYS9saWIvaWd0X3Bzci5jCisrKyBiL2xpYi9pZ3RfcHNyLmMK QEAgLTIxLDYgKzIxLDcgQEAKICAqIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCisjaW5jbHVkZSAi aWd0X3BhcmFtcy5oIgogI2luY2x1ZGUgImlndF9wc3IuaCIKICNpbmNsdWRlICJpZ3Rfc3lzZnMu aCIKICNpbmNsdWRlIDxlcnJuby5oPgpkaWZmIC0tZ2l0IGEvbGliL2lndF9zeXNmcy5jIGIvbGli L2lndF9zeXNmcy5jCmluZGV4IDc1MjhjM2JkLi42YWFmZTUzNCAxMDA2NDQKLS0tIGEvbGliL2ln dF9zeXNmcy5jCisrKyBiL2xpYi9pZ3Rfc3lzZnMuYwpAQCAtMTM1LDc0ICsxMzUsNiBAQCBpbnQg aWd0X3N5c2ZzX29wZW4oaW50IGRldmljZSkKIAlyZXR1cm4gb3BlbihwYXRoLCBPX1JET05MWSk7 CiB9CiAKLS8qKgotICogaWd0X3N5c2ZzX3NldF9wYXJhbWV0ZXJzOgotICogQGRldmljZTogZmQg b2YgdGhlIGRldmljZQotICogQHBhcmFtZXRlcjogdGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlciB0 byBzZXQKLSAqIEBmbXQ6IHByaW50Zi1lc3F1ZSBmb3JtYXQgc3RyaW5nCi0gKgotICogUmV0dXJu cyB0cnVlIG9uIHN1Y2Nlc3MKLSAqLwotYm9vbCBpZ3Rfc3lzZnNfc2V0X3BhcmFtZXRlcihpbnQg ZGV2aWNlLAotCQkJICAgICBjb25zdCBjaGFyICpwYXJhbWV0ZXIsCi0JCQkgICAgIGNvbnN0IGNo YXIgKmZtdCwgLi4uKQotewotCXZhX2xpc3QgYXA7Ci0JaW50IGRpcjsKLQlpbnQgcmV0OwotCi0J ZGlyID0gaWd0X3N5c2ZzX29wZW5fcGFyYW1ldGVycyhkZXZpY2UpOwotCWlmIChkaXIgPCAwKQot CQlyZXR1cm4gZmFsc2U7Ci0KLQl2YV9zdGFydChhcCwgZm10KTsKLQlyZXQgPSBpZ3Rfc3lzZnNf dnByaW50ZihkaXIsIHBhcmFtZXRlciwgZm10LCBhcCk7Ci0JdmFfZW5kKGFwKTsKLQotCWNsb3Nl KGRpcik7Ci0KLQlyZXR1cm4gcmV0ID4gMDsKLX0KLQotLyoqCi0gKiBpZ3Rfc3lzZnNfb3Blbl9w YXJhbWV0ZXJzOgotICogQGRldmljZTogZmQgb2YgdGhlIGRldmljZQotICoKLSAqIFRoaXMgb3Bl bnMgdGhlIG1vZHVsZSBwYXJhbWV0ZXJzIGRpcmVjdG9yeSAodW5kZXIgc3lzZnMpIGNvcnJlc3Bv bmRpbmcKLSAqIHRvIHRoZSBkZXZpY2UgZm9yIHVzZSB3aXRoIGlndF9zeXNmc19zZXQoKSBhbmQg aWd0X3N5c2ZzX2dldCgpLgotICoKLSAqIFJldHVybnM6Ci0gKiBUaGUgZGlyZWN0b3J5IGZkLCBv ciAtMSBvbiBmYWlsdXJlLgotICovCi1pbnQgaWd0X3N5c2ZzX29wZW5fcGFyYW1ldGVycyhpbnQg ZGV2aWNlKQotewotCWludCBkaXIsIHBhcmFtcyA9IC0xOwotCi0JZGlyID0gaWd0X3N5c2ZzX29w ZW4oZGV2aWNlKTsKLQlpZiAoZGlyID49IDApIHsKLQkJcGFyYW1zID0gb3BlbmF0KGRpciwKLQkJ CQkiZGV2aWNlL2RyaXZlci9tb2R1bGUvcGFyYW1ldGVycyIsCi0JCQkJT19SRE9OTFkpOwotCQlj bG9zZShkaXIpOwotCX0KLQotCWlmIChwYXJhbXMgPCAwKSB7IC8qIGJ1aWx0aW4/ICovCi0JCWRy bV92ZXJzaW9uX3QgdmVyc2lvbjsKLQkJY2hhciBuYW1lWzMyXSA9ICIiOwotCQljaGFyIHBhdGhb UEFUSF9NQVhdOwotCi0JCW1lbXNldCgmdmVyc2lvbiwgMCwgc2l6ZW9mKHZlcnNpb24pKTsKLQkJ dmVyc2lvbi5uYW1lX2xlbiA9IHNpemVvZihuYW1lKTsKLQkJdmVyc2lvbi5uYW1lID0gbmFtZTsK LQkJaW9jdGwoZGV2aWNlLCBEUk1fSU9DVExfVkVSU0lPTiwgJnZlcnNpb24pOwotCi0JCXNwcmlu dGYocGF0aCwgIi9zeXMvbW9kdWxlLyVzL3BhcmFtZXRlcnMiLCBuYW1lKTsKLQkJcGFyYW1zID0g b3BlbihwYXRoLCBPX1JET05MWSk7Ci0JfQotCi0JcmV0dXJuIHBhcmFtczsKLX0KLQogLyoqCiAg KiBpZ3Rfc3lzZnNfd3JpdGU6CiAgKiBAZGlyOiBkaXJlY3RvcnkgZm9yIHRoZSBkZXZpY2UgZnJv bSBpZ3Rfc3lzZnNfb3BlbigpCmRpZmYgLS1naXQgYS9saWIvaWd0X3N5c2ZzLmggYi9saWIvaWd0 X3N5c2ZzLmgKaW5kZXggYjY0NmRmMzAuLjY0OTM1YTVjIDEwMDY0NAotLS0gYS9saWIvaWd0X3N5 c2ZzLmgKKysrIGIvbGliL2lndF9zeXNmcy5oCkBAIC0zMCwxMSArMzAsNiBAQAogCiBjaGFyICpp Z3Rfc3lzZnNfcGF0aChpbnQgZGV2aWNlLCBjaGFyICpwYXRoLCBpbnQgcGF0aGxlbik7CiBpbnQg aWd0X3N5c2ZzX29wZW4oaW50IGRldmljZSk7Ci1pbnQgaWd0X3N5c2ZzX29wZW5fcGFyYW1ldGVy cyhpbnQgZGV2aWNlKTsKLWJvb2wgaWd0X3N5c2ZzX3NldF9wYXJhbWV0ZXIoaW50IGRldmljZSwK LQkJCSAgICAgY29uc3QgY2hhciAqcGFyYW1ldGVyLAotCQkJICAgICBjb25zdCBjaGFyICpmbXQs IC4uLikKLQlfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLDMsNCkpKTsKIAogaW50IGlndF9z eXNmc19yZWFkKGludCBkaXIsIGNvbnN0IGNoYXIgKmF0dHIsIHZvaWQgKmRhdGEsIGludCBsZW4p OwogaW50IGlndF9zeXNmc193cml0ZShpbnQgZGlyLCBjb25zdCBjaGFyICphdHRyLCBjb25zdCB2 b2lkICpkYXRhLCBpbnQgbGVuKTsKZGlmZiAtLWdpdCBhL2xpYi9tZXNvbi5idWlsZCBiL2xpYi9t ZXNvbi5idWlsZAppbmRleCBlMjA2MDQzMC4uYzlhZjA0MDMgMTAwNjQ0Ci0tLSBhL2xpYi9tZXNv bi5idWlsZAorKysgYi9saWIvbWVzb24uYnVpbGQKQEAgLTE3LDYgKzE3LDcgQEAgbGliX3NvdXJj ZXMgPSBbCiAJJ2lndF9oYWxmZmxvYXQuYycsCiAJJ2lndF9tYXRyaXguYycsCiAJJ2lndF9wZXJm LmMnLAorCSdpZ3RfcGFyYW1zLmMnLAogCSdpZ3RfcHJpbWVzLmMnLAogCSdpZ3RfcmFuZC5jJywK IAknaWd0X3JhcGwuYycsCmRpZmYgLS1naXQgYS90ZXN0cy9pOTE1L2dlbV9jdHhfcGVyc2lzdGVu Y2UuYyBiL3Rlc3RzL2k5MTUvZ2VtX2N0eF9wZXJzaXN0ZW5jZS5jCmluZGV4IDNkNTI5ODdkLi45 NjViNzg4YiAxMDA2NDQKLS0tIGEvdGVzdHMvaTkxNS9nZW1fY3R4X3BlcnNpc3RlbmNlLmMKKysr IGIvdGVzdHMvaTkxNS9nZW1fY3R4X3BlcnNpc3RlbmNlLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNp bmNsdWRlICJpZ3RfZHVtbXlsb2FkLmgiCiAjaW5jbHVkZSAiaWd0X2d0LmgiCiAjaW5jbHVkZSAi aWd0X3N5c2ZzLmgiCisjaW5jbHVkZSAiaWd0X3BhcmFtcy5oIgogI2luY2x1ZGUgImlvY3RsX3dy YXBwZXJzLmgiIC8qIGdlbV93YWl0KCkhICovCiAjaW5jbHVkZSAic3dfc3luYy5oIgogCi0tIAoy LjE3LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmln dC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgo=