From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pg1-x544.google.com (mail-pg1-x544.google.com [IPv6:2607:f8b0:4864:20::544]) by gabe.freedesktop.org (Postfix) with ESMTPS id 31AF96E526 for ; Mon, 20 Apr 2020 12:17:56 +0000 (UTC) Received: by mail-pg1-x544.google.com with SMTP id w11so4944719pga.12 for ; Mon, 20 Apr 2020 05:17:56 -0700 (PDT) From: Juha-Pekka Heikkila Date: Mon, 20 Apr 2020 15:17:40 +0300 Message-Id: <20200420121747.23816-2-juhapekka.heikkila@gmail.com> In-Reply-To: <20200420121747.23816-1-juhapekka.heikkila@gmail.com> References: <20200420121747.23816-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 bmVkLW9mZi1ieTogSmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGludGVsLmNvbT4KLS0tCiBsaWIv TWFrZWZpbGUuc291cmNlcyAgICAgICAgICAgICB8ICAgMiArCiBsaWIvaTkxNS9nZW1fc3VibWlz c2lvbi5jICAgICAgICB8ICAgMSArCiBsaWIvaWd0LmggICAgICAgICAgICAgICAgICAgICAgICB8 ICAgMSArCiBsaWIvaWd0X2F1eC5jICAgICAgICAgICAgICAgICAgICB8IDE0MyArLS0tLS0tLS0t LS0tLS0tLS0KIGxpYi9pZ3RfYXV4LmggICAgICAgICAgICAgICAgICAgIHwgICAzIC0KIGxpYi9p Z3RfZ3QuYyAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGxpYi9pZ3RfcGFyYW1zLmMgICAg ICAgICAgICAgICAgIHwgMjQ0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGxpYi9p Z3RfcGFyYW1zLmggICAgICAgICAgICAgICAgIHwgIDM4ICsrKysrCiBsaWIvaWd0X3Bzci5jICAg ICAgICAgICAgICAgICAgICB8ICAgMSArCiBsaWIvaWd0X3N5c2ZzLmMgICAgICAgICAgICAgICAg ICB8ICA2OCAtLS0tLS0tLS0KIGxpYi9pZ3Rfc3lzZnMuaCAgICAgICAgICAgICAgICAgIHwgICA1 IC0KIGxpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgIHwgICAxICsKIHRlc3RzL2k5MTUv Z2VtX2N0eF9wZXJzaXN0ZW5jZS5jIHwgICAxICsKIDEzIGZpbGVzIGNoYW5nZWQsIDI5MSBpbnNl cnRpb25zKCspLCAyMTggZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2lndF9w YXJhbXMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pZ3RfcGFyYW1zLmgKCmRpZmYgLS1naXQg YS9saWIvTWFrZWZpbGUuc291cmNlcyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IDFlMmM4 OGFlLi4yZWFkOWQwMiAxMDA2NDQKLS0tIGEvbGliL01ha2VmaWxlLnNvdXJjZXMKKysrIGIvbGli L01ha2VmaWxlLnNvdXJjZXMKQEAgLTQ3LDYgKzQ3LDggQEAgbGliX3NvdXJjZV9saXN0ID0JIAlc CiAJaWd0X2xpc3QuaAkJXAogCWlndF9tYXRyaXguYwkJXAogCWlndF9tYXRyaXguaAkJXAorCWln dF9wYXJhbXMuYwkJXAorCWlndF9wYXJhbXMuaAkJXAogCWlndF9wcmltZXMuYwkJXAogCWlndF9w cmltZXMuaAkJXAogCWlndF9yYW5kLmMJCVwKZGlmZiAtLWdpdCBhL2xpYi9pOTE1L2dlbV9zdWJt aXNzaW9uLmMgYi9saWIvaTkxNS9nZW1fc3VibWlzc2lvbi5jCmluZGV4IDcyZGUwYzIyLi5iYjU4 YTIwNyAxMDA2NDQKLS0tIGEvbGliL2k5MTUvZ2VtX3N1Ym1pc3Npb24uYworKysgYi9saWIvaTkx NS9nZW1fc3VibWlzc2lvbi5jCkBAIC0zMiw2ICszMiw3IEBACiAKICNpbmNsdWRlICJpZ3RfY29y ZS5oIgogI2luY2x1ZGUgImlndF9ndC5oIgorI2luY2x1ZGUgImlndF9wYXJhbXMuaCIKICNpbmNs dWRlICJpZ3Rfc3lzZnMuaCIKICNpbmNsdWRlICJpbnRlbF9jaGlwc2V0LmgiCiAjaW5jbHVkZSAi aW50ZWxfcmVnLmgiCmRpZmYgLS1naXQgYS9saWIvaWd0LmggYi9saWIvaWd0LmgKaW5kZXggYTZj NGU0NGQuLjBiZjk4YWE1IDEwMDY0NAotLS0gYS9saWIvaWd0LmgKKysrIGIvbGliL2lndC5oCkBA IC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiaWd0X2ZyYW1lLmgiCiAjaW5jbHVkZSAiaWd0X2d0 LmgiCiAjaW5jbHVkZSAiaWd0X2ttcy5oIgorI2luY2x1ZGUgImlndF9wYXJhbXMuaCIKICNpbmNs dWRlICJpZ3RfcG0uaCIKICNpbmNsdWRlICJpZ3Rfc3RhdHMuaCIKICNpZmRlZiBIQVZFX0NIQU1F TElVTQpkaWZmIC0tZ2l0IGEvbGliL2lndF9hdXguYyBiL2xpYi9pZ3RfYXV4LmMKaW5kZXggZWNh YjVkOTkuLmM1NWIyOTE2IDEwMDY0NAotLS0gYS9saWIvaWd0X2F1eC5jCisrKyBiL2xpYi9pZ3Rf YXV4LmMKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlICJpZ3RfYXV4LmgiCiAjaW5jbHVkZSAi aWd0X2RlYnVnZnMuaCIKICNpbmNsdWRlICJpZ3RfZ3QuaCIKKyNpbmNsdWRlICJpZ3RfcGFyYW1z LmgiCiAjaW5jbHVkZSAiaWd0X3JhbmQuaCIKICNpbmNsdWRlICJpZ3Rfc3lzZnMuaCIKICNpbmNs dWRlICJjb25maWcuaCIKQEAgLTExMTYsMTQ4ICsxMTE3LDYgQEAgdm9pZCBpZ3RfdW5sb2NrX21l bSh2b2lkKQogCWxvY2tlZF9tZW0gPSBOVUxMOwogfQogCi0KLSNkZWZpbmUgTU9EVUxFX1BBUkFN X0RJUiAiL3N5cy9tb2R1bGUvaTkxNS9wYXJhbWV0ZXJzLyIKLSNkZWZpbmUgUEFSQU1fTkFNRV9N QVhfU1ogMzIKLSNkZWZpbmUgUEFSQU1fVkFMVUVfTUFYX1NaIDE2Ci0jZGVmaW5lIFBBUkFNX0ZJ TEVfUEFUSF9NQVhfU1ogKHN0cmxlbihNT0RVTEVfUEFSQU1fRElSKSArIFBBUkFNX05BTUVfTUFY X1NaKQotCi1zdHJ1Y3QgbW9kdWxlX3BhcmFtX2RhdGEgewotCWNoYXIgbmFtZVtQQVJBTV9OQU1F X01BWF9TWl07Ci0JY2hhciBvcmlnaW5hbF92YWx1ZVtQQVJBTV9WQUxVRV9NQVhfU1pdOwotCi0J c3RydWN0IG1vZHVsZV9wYXJhbV9kYXRhICpuZXh0OwotfTsKLXN0cnVjdCBtb2R1bGVfcGFyYW1f ZGF0YSAqbW9kdWxlX3BhcmFtcyA9IE5VTEw7Ci0KLXN0YXRpYyB2b2lkIGlndF9tb2R1bGVfcGFy YW1fZXhpdF9oYW5kbGVyKGludCBzaWcpCi17Ci0JY29uc3Qgc2l6ZV90IGRpcl9sZW4gPSBzdHJs ZW4oTU9EVUxFX1BBUkFNX0RJUik7Ci0JY2hhciBmaWxlX3BhdGhbUEFSQU1fRklMRV9QQVRIX01B WF9TWl07Ci0Jc3RydWN0IG1vZHVsZV9wYXJhbV9kYXRhICpkYXRhOwotCWludCBmZDsKLQotCS8q IFdlIGRvbid0IG5lZWQgdG8gYXNzZXJ0IHN0cmluZyBzaXplcyBvbiB0aGlzIGZ1bmN0aW9uIHNp bmNlIHRoZXkgd2VyZQotCSAqIGFscmVhZHkgY2hlY2tlZCBiZWZvcmUgYmVpbmcgc3RvcmVkIG9u IHRoZSBsaXN0cy4gQmVzaWRlcywKLQkgKiBpZ3RfYXNzZXJ0KCkgaXMgbm90IEFTLVNhZmUuICov Ci0Jc3RyY3B5KGZpbGVfcGF0aCwgTU9EVUxFX1BBUkFNX0RJUik7Ci0KLQlmb3IgKGRhdGEgPSBt b2R1bGVfcGFyYW1zOyBkYXRhICE9IE5VTEw7IGRhdGEgPSBkYXRhLT5uZXh0KSB7Ci0JCXN0cmNw eShmaWxlX3BhdGggKyBkaXJfbGVuLCBkYXRhLT5uYW1lKTsKLQotCQlmZCA9IG9wZW4oZmlsZV9w YXRoLCBPX1JEV1IpOwotCQlpZiAoZmQgPj0gMCkgewotCQkJaW50IHNpemUgPSBzdHJsZW4gKGRh dGEtPm9yaWdpbmFsX3ZhbHVlKTsKLQotCQkJaWYgKHNpemUgIT0gd3JpdGUoZmQsIGRhdGEtPm9y aWdpbmFsX3ZhbHVlLCBzaXplKSkgewotCQkJCWNvbnN0IGNoYXIgbXNnW10gPSAiV0FSTklORzog TW9kdWxlIHBhcmFtZXRlcnMgIgotCQkJCQkibWF5IG5vdCBoYXZlIGJlZW4gcmVzZXQgdG8gdGhl aXIgIgotCQkJCQkib3JpZ2luYWwgdmFsdWVzXG4iOwotCQkJCWFzc2VydCh3cml0ZShTVERFUlJf RklMRU5PLCBtc2csIHNpemVvZihtc2cpKQotCQkJCSAgICAgICA9PSBzaXplb2YobXNnKSk7Ci0J CQl9Ci0KLQkJCWNsb3NlKGZkKTsKLQkJfQotCX0KLQkvKiBmcmVlKCkgaXMgbm90IEFTLVNhZmUs IHNvIHdlIGNhbid0IGNhbGwgaXQgaGVyZS4gKi8KLX0KLQotLyoqCi0gKiBpZ3Rfc2F2ZV9tb2R1 bGVfcGFyYW06Ci0gKiBAbmFtZTogbmFtZSBvZiB0aGUgaTkxNS5rbyBtb2R1bGUgcGFyYW1ldGVy Ci0gKiBAZmlsZV9wYXRoOiBmdWxsIHN5c2ZzIGZpbGUgcGF0aCBmb3IgdGhlIHBhcmFtZXRlcgot ICoKLSAqIFJlYWRzIHRoZSBjdXJyZW50IHZhbHVlIG9mIGFuIGk5MTUua28gbW9kdWxlIHBhcmFt ZXRlciwgc2F2ZXMgaXQgb24gYW4gYXJyYXksCi0gKiB0aGVuIGluc3RhbGxzIGFuIGV4aXQgaGFu ZGxlciB0byByZXN0b3JlIGl0IHdoZW4gdGhlIHByb2dyYW0gZXhpdHMuCi0gKgotICogSXQgaXMg c2FmZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gbXVsdGlwbGUgdGltZXMgZm9yIHRoZSBzYW1lIHBh cmFtZXRlci4KLSAqCi0gKiBOb3RpY2UgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBp Z3Rfc2V0X21vZHVsZV9wYXJhbSgpLCBzbyB0aGF0IG9uZSAtCi0gKiBvciBvbmUgb2YgaXRzIHdy YXBwZXJzIC0gaXMgdGhlIG9ubHkgZnVuY3Rpb24gdGhlIHRlc3QgcHJvZ3JhbXMgbmVlZCB0byBj YWxsLgotICovCi1zdGF0aWMgdm9pZCBpZ3Rfc2F2ZV9tb2R1bGVfcGFyYW0oY29uc3QgY2hhciAq bmFtZSwgY29uc3QgY2hhciAqZmlsZV9wYXRoKQotewotCXN0cnVjdCBtb2R1bGVfcGFyYW1fZGF0 YSAqZGF0YTsKLQlzaXplX3QgbjsKLQlpbnQgZmQ7Ci0KLQkvKiBDaGVjayBpZiB0aGlzIHBhcmFt ZXRlciBpcyBhbHJlYWR5IHNhdmVkLiAqLwotCWZvciAoZGF0YSA9IG1vZHVsZV9wYXJhbXM7IGRh dGEgIT0gTlVMTDsgZGF0YSA9IGRhdGEtPm5leHQpCi0JCWlmIChzdHJuY21wKGRhdGEtPm5hbWUs IG5hbWUsIFBBUkFNX05BTUVfTUFYX1NaKSA9PSAwKQotCQkJcmV0dXJuOwotCi0JaWYgKCFtb2R1 bGVfcGFyYW1zKQotCQlpZ3RfaW5zdGFsbF9leGl0X2hhbmRsZXIoaWd0X21vZHVsZV9wYXJhbV9l eGl0X2hhbmRsZXIpOwotCi0JZGF0YSA9IGNhbGxvYygxLCBzaXplb2YgKCpkYXRhKSk7Ci0JaWd0 X2Fzc2VydChkYXRhKTsKLQotCXN0cm5jcHkoZGF0YS0+bmFtZSwgbmFtZSwgUEFSQU1fTkFNRV9N QVhfU1ogLSAxKTsKLQotCWZkID0gb3BlbihmaWxlX3BhdGgsIE9fUkRPTkxZKTsKLQlpZ3RfYXNz ZXJ0KGZkID49IDApOwotCi0JbiA9IHJlYWQoZmQsIGRhdGEtPm9yaWdpbmFsX3ZhbHVlLCBQQVJB TV9WQUxVRV9NQVhfU1opOwotCWlndF9hc3NlcnRfZihuID4gMCAmJiBuIDwgUEFSQU1fVkFMVUVf TUFYX1NaLAotCQkgICAgICJOZWVkIHRvIGluY3JlYXNlIFBBUkFNX1ZBTFVFX01BWF9TWlxuIik7 Ci0KLQlpZ3RfYXNzZXJ0KGNsb3NlKGZkKSA9PSAwKTsKLQotCWRhdGEtPm5leHQgPSBtb2R1bGVf cGFyYW1zOwotCW1vZHVsZV9wYXJhbXMgPSBkYXRhOwotfQotCi0vKioKLSAqIGlndF9zZXRfbW9k dWxlX3BhcmFtOgotICogQG5hbWU6IGk5MTUua28gcGFyYW1ldGVyIG5hbWUKLSAqIEB2YWw6IGk5 MTUua28gcGFyYW1ldGVyIHZhbHVlCi0gKgotICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBkZXNp cmVkIHZhbHVlIGZvciB0aGUgZ2l2ZW4gaTkxNS5rbyBwYXJhbWV0ZXIuIEl0IGFsc28KLSAqIHRh a2VzIGNhcmUgb2Ygc2F2aW5nIGFuZCByZXN0b3JpbmcgdGhlIHZhbHVlcyB0aGF0IHdlcmUgYWxy ZWFkeSBzZXQgYmVmb3JlCi0gKiB0aGUgdGVzdCB3YXMgcnVuLgotICoKLSAqIFBsZWFzZSBjb25z aWRlciB1c2luZyBpZ3Rfc2V0X21vZHVsZV9wYXJhbV9pbnQoKSBmb3IgdGhlIGludGVnZXIgYW5k IGJvb2wKLSAqIHBhcmFtZXRlcnMuCi0gKi8KLXZvaWQgaWd0X3NldF9tb2R1bGVfcGFyYW0oY29u c3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsKQotewotCWNoYXIgZmlsZV9wYXRoW1BBUkFN X0ZJTEVfUEFUSF9NQVhfU1pdOwotCXNpemVfdCBsZW4gPSBzdHJsZW4odmFsKTsKLQlpbnQgZmQ7 Ci0KLQlpZ3RfYXNzZXJ0X2Yoc3RybGVuKG5hbWUpIDwgUEFSQU1fTkFNRV9NQVhfU1osCi0JCSAg ICAgIk5lZWQgdG8gaW5jcmVhc2UgUEFSQU1fTkFNRV9NQVhfU1pcbiIpOwotCXN0cmNweShmaWxl X3BhdGgsIE1PRFVMRV9QQVJBTV9ESVIpOwotCXN0cmNweShmaWxlX3BhdGggKyBzdHJsZW4oTU9E VUxFX1BBUkFNX0RJUiksIG5hbWUpOwotCi0JaWd0X3NhdmVfbW9kdWxlX3BhcmFtKG5hbWUsIGZp bGVfcGF0aCk7Ci0KLQlmZCA9IG9wZW4oZmlsZV9wYXRoLCBPX1JEV1IpOwotCWlndF9hc3NlcnQo d3JpdGUoZmQsIHZhbCwgbGVuKSA9PSBsZW4pOwotCWlndF9hc3NlcnQoY2xvc2UoZmQpID09IDAp OwotfQotCi0vKioKLSAqIGlndF9zZXRfbW9kdWxlX3BhcmFtX2ludDoKLSAqIEBuYW1lOiBpOTE1 LmtvIHBhcmFtZXRlciBuYW1lCi0gKiBAdmFsOiBpOTE1LmtvIHBhcmFtZXRlciB2YWx1ZQotICoK LSAqIFRoaXMgaXMgYSB3cmFwcGVyIGZvciBpZ3Rfc2V0X21vZHVsZV9wYXJhbSgpIHRoYXQgdGFr ZXMgYW4gaW50ZWdlciBpbnN0ZWFkIG9mCi0gKiBhIHN0cmluZy4gUGxlYXNlIHNlZSBpZ3Rfc2V0 X21vZHVsZV9wYXJhbSgpLgotICovCi12b2lkIGlndF9zZXRfbW9kdWxlX3BhcmFtX2ludChjb25z dCBjaGFyICpuYW1lLCBpbnQgdmFsKQotewotCWNoYXIgc3RyW1BBUkFNX1ZBTFVFX01BWF9TWl07 Ci0JaW50IG47Ci0KLQluID0gc25wcmludGYoc3RyLCBQQVJBTV9WQUxVRV9NQVhfU1osICIlZFxu IiwgdmFsKTsKLQlpZ3RfYXNzZXJ0X2YobiA8IFBBUkFNX1ZBTFVFX01BWF9TWiwKLQkJICAgICAi TmVlZCB0byBpbmNyZWFzZSBQQVJBTV9WQUxVRV9NQVhfU1pcbiIpOwotCi0JaWd0X3NldF9tb2R1 bGVfcGFyYW0obmFtZSwgc3RyKTsKLX0KLQogLyoqCiAgKiBpZ3RfaXNfcHJvY2Vzc19ydW5uaW5n OgogICogQGNvbW06IE5hbWUgb2YgcHJvY2VzcyBpbiB0aGUgZm9ybSBmb3VuZCBpbiAvcHJvYy9w aWQvY29tbSAobGltaXRlZCB0byAxNQpkaWZmIC0tZ2l0IGEvbGliL2lndF9hdXguaCBiL2xpYi9p Z3RfYXV4LmgKaW5kZXggMDRkMjI5MDQuLmJmNTdjY2Y1IDEwMDY0NAotLS0gYS9saWIvaWd0X2F1 eC5oCisrKyBiL2xpYi9pZ3RfYXV4LmgKQEAgLTI4NSw5ICsyODUsNiBAQCBkb3VibGUgaWd0X3N0 b3Bfc2lnbGF0ZW5jeShzdHJ1Y3QgaWd0X21lYW4gKnJlc3VsdCk7CiAKIGJvb2wgaWd0X2FsbG93 X3VubGltaXRlZF9maWxlcyh2b2lkKTsKIAotdm9pZCBpZ3Rfc2V0X21vZHVsZV9wYXJhbShjb25z dCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWwpOwotdm9pZCBpZ3Rfc2V0X21vZHVsZV9wYXJh bV9pbnQoY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbCk7Ci0KIGludCBpZ3RfaXNfcHJvY2Vzc19y dW5uaW5nKGNvbnN0IGNoYXIgKmNvbW0pOwogaW50IGlndF90ZXJtaW5hdGVfcHJvY2VzcyhpbnQg c2lnLCBjb25zdCBjaGFyICpjb21tKTsKIHZvaWQgaWd0X2xzb2YoY29uc3QgY2hhciAqZHBhdGgp OwpkaWZmIC0tZ2l0IGEvbGliL2lndF9ndC5jIGIvbGliL2lndF9ndC5jCmluZGV4IDI1NmM3Y2Jj Li4yMjM0MGEzZCAxMDA2NDQKLS0tIGEvbGliL2lndF9ndC5jCisrKyBiL2xpYi9pZ3RfZ3QuYwpA QCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgImlndF9hdXguaCIKICNpbmNsdWRlICJpZ3RfY29y ZS5oIgogI2luY2x1ZGUgImlndF9ndC5oIgorI2luY2x1ZGUgImlndF9wYXJhbXMuaCIKICNpbmNs dWRlICJpZ3Rfc3lzZnMuaCIKICNpbmNsdWRlICJpZ3RfZGVidWdmcy5oIgogI2luY2x1ZGUgImlv Y3RsX3dyYXBwZXJzLmgiCmRpZmYgLS1naXQgYS9saWIvaWd0X3BhcmFtcy5jIGIvbGliL2lndF9w YXJhbXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNGJkMmIxZjIKLS0t IC9kZXYvbnVsbAorKysgYi9saWIvaWd0X3BhcmFtcy5jCkBAIC0wLDAgKzEsMjQ0IEBACisvKgor ICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRp bmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGll cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRI RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAor ICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xB SU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04g T0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERF QUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGFzc2VydC5oPgor I2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkYm9v bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisKKyNpbmNs dWRlIDxpOTE1X2RybS5oPgorCisjaW5jbHVkZSAiaWd0X2NvcmUuaCIKKyNpbmNsdWRlICJpZ3Rf cGFyYW1zLmgiCisjaW5jbHVkZSAiaWd0X3N5c2ZzLmgiCisKKyNkZWZpbmUgTU9EVUxFX1BBUkFN X0RJUiAiL3N5cy9tb2R1bGUvaTkxNS9wYXJhbWV0ZXJzLyIKKyNkZWZpbmUgUEFSQU1fTkFNRV9N QVhfU1ogMzIKKyNkZWZpbmUgUEFSQU1fVkFMVUVfTUFYX1NaIDE2CisjZGVmaW5lIFBBUkFNX0ZJ TEVfUEFUSF9NQVhfU1ogKHN0cmxlbihNT0RVTEVfUEFSQU1fRElSKSArIFBBUkFNX05BTUVfTUFY X1NaKQorCitzdHJ1Y3QgbW9kdWxlX3BhcmFtX2RhdGEgeworCWNoYXIgbmFtZVtQQVJBTV9OQU1F X01BWF9TWl07CisJY2hhciBvcmlnaW5hbF92YWx1ZVtQQVJBTV9WQUxVRV9NQVhfU1pdOworCisJ c3RydWN0IG1vZHVsZV9wYXJhbV9kYXRhICpuZXh0OworfTsKK3N0cnVjdCBtb2R1bGVfcGFyYW1f ZGF0YSAqbW9kdWxlX3BhcmFtcyA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIGlndF9tb2R1bGVfcGFy YW1fZXhpdF9oYW5kbGVyKGludCBzaWcpCit7CisJY29uc3Qgc2l6ZV90IGRpcl9sZW4gPSBzdHJs ZW4oTU9EVUxFX1BBUkFNX0RJUik7CisJY2hhciBmaWxlX3BhdGhbUEFSQU1fRklMRV9QQVRIX01B WF9TWl07CisJc3RydWN0IG1vZHVsZV9wYXJhbV9kYXRhICpkYXRhOworCWludCBmZDsKKworCS8q IFdlIGRvbid0IG5lZWQgdG8gYXNzZXJ0IHN0cmluZyBzaXplcyBvbiB0aGlzIGZ1bmN0aW9uIHNp bmNlIHRoZXkgd2VyZQorCSAqIGFscmVhZHkgY2hlY2tlZCBiZWZvcmUgYmVpbmcgc3RvcmVkIG9u IHRoZSBsaXN0cy4gQmVzaWRlcywKKwkgKiBpZ3RfYXNzZXJ0KCkgaXMgbm90IEFTLVNhZmUuICov CisJc3RyY3B5KGZpbGVfcGF0aCwgTU9EVUxFX1BBUkFNX0RJUik7CisKKwlmb3IgKGRhdGEgPSBt b2R1bGVfcGFyYW1zOyBkYXRhICE9IE5VTEw7IGRhdGEgPSBkYXRhLT5uZXh0KSB7CisJCXN0cmNw eShmaWxlX3BhdGggKyBkaXJfbGVuLCBkYXRhLT5uYW1lKTsKKworCQlmZCA9IG9wZW4oZmlsZV9w YXRoLCBPX1JEV1IpOworCQlpZiAoZmQgPj0gMCkgeworCQkJaW50IHNpemUgPSBzdHJsZW4gKGRh dGEtPm9yaWdpbmFsX3ZhbHVlKTsKKworCQkJaWYgKHNpemUgIT0gd3JpdGUoZmQsIGRhdGEtPm9y aWdpbmFsX3ZhbHVlLCBzaXplKSkgeworCQkJCWNvbnN0IGNoYXIgbXNnW10gPSAiV0FSTklORzog TW9kdWxlIHBhcmFtZXRlcnMgIgorCQkJCQkibWF5IG5vdCBoYXZlIGJlZW4gcmVzZXQgdG8gdGhl aXIgIgorCQkJCQkib3JpZ2luYWwgdmFsdWVzXG4iOworCQkJCWFzc2VydCh3cml0ZShTVERFUlJf RklMRU5PLCBtc2csIHNpemVvZihtc2cpKQorCQkJCSAgICAgICA9PSBzaXplb2YobXNnKSk7CisJ CQl9CisKKwkJCWNsb3NlKGZkKTsKKwkJfQorCX0KKwkvKiBmcmVlKCkgaXMgbm90IEFTLVNhZmUs IHNvIHdlIGNhbid0IGNhbGwgaXQgaGVyZS4gKi8KK30KKworLyoqCisgKiBpZ3Rfc2F2ZV9tb2R1 bGVfcGFyYW06CisgKiBAbmFtZTogbmFtZSBvZiB0aGUgaTkxNS5rbyBtb2R1bGUgcGFyYW1ldGVy CisgKiBAZmlsZV9wYXRoOiBmdWxsIHN5c2ZzIGZpbGUgcGF0aCBmb3IgdGhlIHBhcmFtZXRlcgor ICoKKyAqIFJlYWRzIHRoZSBjdXJyZW50IHZhbHVlIG9mIGFuIGk5MTUua28gbW9kdWxlIHBhcmFt ZXRlciwgc2F2ZXMgaXQgb24gYW4gYXJyYXksCisgKiB0aGVuIGluc3RhbGxzIGFuIGV4aXQgaGFu ZGxlciB0byByZXN0b3JlIGl0IHdoZW4gdGhlIHByb2dyYW0gZXhpdHMuCisgKgorICogSXQgaXMg c2FmZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gbXVsdGlwbGUgdGltZXMgZm9yIHRoZSBzYW1lIHBh cmFtZXRlci4KKyAqCisgKiBOb3RpY2UgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBp Z3Rfc2V0X21vZHVsZV9wYXJhbSgpLCBzbyB0aGF0IG9uZSAtCisgKiBvciBvbmUgb2YgaXRzIHdy YXBwZXJzIC0gaXMgdGhlIG9ubHkgZnVuY3Rpb24gdGhlIHRlc3QgcHJvZ3JhbXMgbmVlZCB0byBj YWxsLgorICovCitzdGF0aWMgdm9pZCBpZ3Rfc2F2ZV9tb2R1bGVfcGFyYW0oY29uc3QgY2hhciAq bmFtZSwgY29uc3QgY2hhciAqZmlsZV9wYXRoKQoreworCXN0cnVjdCBtb2R1bGVfcGFyYW1fZGF0 YSAqZGF0YTsKKwlzaXplX3QgbjsKKwlpbnQgZmQ7CisKKwkvKiBDaGVjayBpZiB0aGlzIHBhcmFt ZXRlciBpcyBhbHJlYWR5IHNhdmVkLiAqLworCWZvciAoZGF0YSA9IG1vZHVsZV9wYXJhbXM7IGRh dGEgIT0gTlVMTDsgZGF0YSA9IGRhdGEtPm5leHQpCisJCWlmIChzdHJuY21wKGRhdGEtPm5hbWUs IG5hbWUsIFBBUkFNX05BTUVfTUFYX1NaKSA9PSAwKQorCQkJcmV0dXJuOworCisJaWYgKCFtb2R1 bGVfcGFyYW1zKQorCQlpZ3RfaW5zdGFsbF9leGl0X2hhbmRsZXIoaWd0X21vZHVsZV9wYXJhbV9l eGl0X2hhbmRsZXIpOworCisJZGF0YSA9IGNhbGxvYygxLCBzaXplb2YgKCpkYXRhKSk7CisJaWd0 X2Fzc2VydChkYXRhKTsKKworCXN0cm5jcHkoZGF0YS0+bmFtZSwgbmFtZSwgUEFSQU1fTkFNRV9N QVhfU1ogLSAxKTsKKworCWZkID0gb3BlbihmaWxlX3BhdGgsIE9fUkRPTkxZKTsKKwlpZ3RfYXNz ZXJ0KGZkID49IDApOworCisJbiA9IHJlYWQoZmQsIGRhdGEtPm9yaWdpbmFsX3ZhbHVlLCBQQVJB TV9WQUxVRV9NQVhfU1opOworCWlndF9hc3NlcnRfZihuID4gMCAmJiBuIDwgUEFSQU1fVkFMVUVf TUFYX1NaLAorCQkgICAgICJOZWVkIHRvIGluY3JlYXNlIFBBUkFNX1ZBTFVFX01BWF9TWlxuIik7 CisKKwlpZ3RfYXNzZXJ0KGNsb3NlKGZkKSA9PSAwKTsKKworCWRhdGEtPm5leHQgPSBtb2R1bGVf cGFyYW1zOworCW1vZHVsZV9wYXJhbXMgPSBkYXRhOworfQorCisvKioKKyAqIGlndF9zeXNmc19v cGVuX3BhcmFtZXRlcnM6CisgKiBAZGV2aWNlOiBmZCBvZiB0aGUgZGV2aWNlCisgKgorICogVGhp cyBvcGVucyB0aGUgbW9kdWxlIHBhcmFtZXRlcnMgZGlyZWN0b3J5ICh1bmRlciBzeXNmcykgY29y cmVzcG9uZGluZworICogdG8gdGhlIGRldmljZSBmb3IgdXNlIHdpdGggaWd0X3N5c2ZzX3NldCgp IGFuZCBpZ3Rfc3lzZnNfZ2V0KCkuCisgKgorICogUmV0dXJuczoKKyAqIFRoZSBkaXJlY3Rvcnkg ZmQsIG9yIC0xIG9uIGZhaWx1cmUuCisgKi8KK2ludCBpZ3Rfc3lzZnNfb3Blbl9wYXJhbWV0ZXJz KGludCBkZXZpY2UpCit7CisJaW50IGRpciwgcGFyYW1zID0gLTE7CisKKwlkaXIgPSBpZ3Rfc3lz ZnNfb3BlbihkZXZpY2UpOworCWlmIChkaXIgPj0gMCkgeworCQlwYXJhbXMgPSBvcGVuYXQoZGly LAorCQkJCSJkZXZpY2UvZHJpdmVyL21vZHVsZS9wYXJhbWV0ZXJzIiwKKwkJCQlPX1JET05MWSk7 CisJCWNsb3NlKGRpcik7CisJfQorCisJaWYgKHBhcmFtcyA8IDApIHsgLyogYnVpbHRpbj8gKi8K KwkJZHJtX3ZlcnNpb25fdCB2ZXJzaW9uOworCQljaGFyIG5hbWVbMzJdID0gIiI7CisJCWNoYXIg cGF0aFtQQVRIX01BWF07CisKKwkJbWVtc2V0KCZ2ZXJzaW9uLCAwLCBzaXplb2YodmVyc2lvbikp OworCQl2ZXJzaW9uLm5hbWVfbGVuID0gc2l6ZW9mKG5hbWUpOworCQl2ZXJzaW9uLm5hbWUgPSBu YW1lOworCQlpb2N0bChkZXZpY2UsIERSTV9JT0NUTF9WRVJTSU9OLCAmdmVyc2lvbik7CisKKwkJ c3ByaW50ZihwYXRoLCAiL3N5cy9tb2R1bGUvJXMvcGFyYW1ldGVycyIsIG5hbWUpOworCQlwYXJh bXMgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKKwl9CisKKwlyZXR1cm4gcGFyYW1zOworfQorCisv KioKKyAqIGlndF9zeXNmc19zZXRfcGFyYW1ldGVyczoKKyAqIEBkZXZpY2U6IGZkIG9mIHRoZSBk ZXZpY2UKKyAqIEBwYXJhbWV0ZXI6IHRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIgdG8gc2V0Cisg KiBAZm10OiBwcmludGYtZXNxdWUgZm9ybWF0IHN0cmluZworICoKKyAqIFJldHVybnMgdHJ1ZSBv biBzdWNjZXNzCisgKi8KK2Jvb2wgaWd0X3N5c2ZzX3NldF9wYXJhbWV0ZXIoaW50IGRldmljZSwK KwkJCSAgICAgY29uc3QgY2hhciAqcGFyYW1ldGVyLAorCQkJICAgICBjb25zdCBjaGFyICpmbXQs IC4uLikKK3sKKwl2YV9saXN0IGFwOworCWludCBkaXI7CisJaW50IHJldDsKKworCWRpciA9IGln dF9zeXNmc19vcGVuX3BhcmFtZXRlcnMoZGV2aWNlKTsKKwlpZiAoZGlyIDwgMCkKKwkJcmV0dXJu IGZhbHNlOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gaWd0X3N5c2ZzX3ZwcmludGYo ZGlyLCBwYXJhbWV0ZXIsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwljbG9zZShkaXIpOwor CisJcmV0dXJuIHJldCA+IDA7Cit9CisKKy8qKgorICogaWd0X3NldF9tb2R1bGVfcGFyYW06Cisg KiBAbmFtZTogaTkxNS5rbyBwYXJhbWV0ZXIgbmFtZQorICogQHZhbDogaTkxNS5rbyBwYXJhbWV0 ZXIgdmFsdWUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGRlc2lyZWQgdmFsdWUgZm9y IHRoZSBnaXZlbiBpOTE1LmtvIHBhcmFtZXRlci4gSXQgYWxzbworICogdGFrZXMgY2FyZSBvZiBz YXZpbmcgYW5kIHJlc3RvcmluZyB0aGUgdmFsdWVzIHRoYXQgd2VyZSBhbHJlYWR5IHNldCBiZWZv cmUKKyAqIHRoZSB0ZXN0IHdhcyBydW4uCisgKgorICogUGxlYXNlIGNvbnNpZGVyIHVzaW5nIGln dF9zZXRfbW9kdWxlX3BhcmFtX2ludCgpIGZvciB0aGUgaW50ZWdlciBhbmQgYm9vbAorICogcGFy YW1ldGVycy4KKyAqLwordm9pZCBpZ3Rfc2V0X21vZHVsZV9wYXJhbShjb25zdCBjaGFyICpuYW1l LCBjb25zdCBjaGFyICp2YWwpCit7CisJY2hhciBmaWxlX3BhdGhbUEFSQU1fRklMRV9QQVRIX01B WF9TWl07CisJc2l6ZV90IGxlbiA9IHN0cmxlbih2YWwpOworCWludCBmZDsKKworCWlndF9hc3Nl cnRfZihzdHJsZW4obmFtZSkgPCBQQVJBTV9OQU1FX01BWF9TWiwKKwkJICAgICAiTmVlZCB0byBp bmNyZWFzZSBQQVJBTV9OQU1FX01BWF9TWlxuIik7CisJc3RyY3B5KGZpbGVfcGF0aCwgTU9EVUxF X1BBUkFNX0RJUik7CisJc3RyY3B5KGZpbGVfcGF0aCArIHN0cmxlbihNT0RVTEVfUEFSQU1fRElS KSwgbmFtZSk7CisKKwlpZ3Rfc2F2ZV9tb2R1bGVfcGFyYW0obmFtZSwgZmlsZV9wYXRoKTsKKwor CWZkID0gb3BlbihmaWxlX3BhdGgsIE9fUkRXUik7CisJaWd0X2Fzc2VydCh3cml0ZShmZCwgdmFs LCBsZW4pID09IGxlbik7CisJaWd0X2Fzc2VydChjbG9zZShmZCkgPT0gMCk7Cit9CisKKy8qKgor ICogaWd0X3NldF9tb2R1bGVfcGFyYW1faW50OgorICogQG5hbWU6IGk5MTUua28gcGFyYW1ldGVy IG5hbWUKKyAqIEB2YWw6IGk5MTUua28gcGFyYW1ldGVyIHZhbHVlCisgKgorICogVGhpcyBpcyBh IHdyYXBwZXIgZm9yIGlndF9zZXRfbW9kdWxlX3BhcmFtKCkgdGhhdCB0YWtlcyBhbiBpbnRlZ2Vy IGluc3RlYWQgb2YKKyAqIGEgc3RyaW5nLiBQbGVhc2Ugc2VlIGlndF9zZXRfbW9kdWxlX3BhcmFt KCkuCisgKi8KK3ZvaWQgaWd0X3NldF9tb2R1bGVfcGFyYW1faW50KGNvbnN0IGNoYXIgKm5hbWUs IGludCB2YWwpCit7CisJY2hhciBzdHJbUEFSQU1fVkFMVUVfTUFYX1NaXTsKKwlpbnQgbjsKKwor CW4gPSBzbnByaW50ZihzdHIsIFBBUkFNX1ZBTFVFX01BWF9TWiwgIiVkXG4iLCB2YWwpOworCWln dF9hc3NlcnRfZihuIDwgUEFSQU1fVkFMVUVfTUFYX1NaLAorCQkgICAgICJOZWVkIHRvIGluY3Jl YXNlIFBBUkFNX1ZBTFVFX01BWF9TWlxuIik7CisKKwlpZ3Rfc2V0X21vZHVsZV9wYXJhbShuYW1l LCBzdHIpOworfQpkaWZmIC0tZ2l0IGEvbGliL2lndF9wYXJhbXMuaCBiL2xpYi9pZ3RfcGFyYW1z LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmNmMGZkMThmCi0tLSAvZGV2 L251bGwKKysrIGIvbGliL2lndF9wYXJhbXMuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29w eXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQor ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p dCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhl IG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZU V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBF WFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhF IEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT CisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfX0lHVF9QQVJBTVNfSF9fCisj ZGVmaW5lIF9fSUdUX1BBUkFNU19IX18KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKworaW50IGln dF9zeXNmc19vcGVuX3BhcmFtZXRlcnMoaW50IGRldmljZSk7CisKK19fYXR0cmlidXRlX18oKGZv cm1hdChwcmludGYsIDMsIDQpKSkKK2Jvb2wgaWd0X3N5c2ZzX3NldF9wYXJhbWV0ZXIoaW50IGRl dmljZSwgY29uc3QgY2hhciAqcGFyYW1ldGVyLAorCQkJICAgICBjb25zdCBjaGFyICpmbXQsIC4u Lik7CisKK3ZvaWQgaWd0X3NldF9tb2R1bGVfcGFyYW0oY29uc3QgY2hhciAqbmFtZSwgY29uc3Qg Y2hhciAqdmFsKTsKK3ZvaWQgaWd0X3NldF9tb2R1bGVfcGFyYW1faW50KGNvbnN0IGNoYXIgKm5h bWUsIGludCB2YWwpOworCisjZW5kaWYgLyogX19JR1RfUEFSQU1TX0hfXyAqLwpkaWZmIC0tZ2l0 IGEvbGliL2lndF9wc3IuYyBiL2xpYi9pZ3RfcHNyLmMKaW5kZXggODNjY2FjZGQuLjJiY2YxNGVh IDEwMDY0NAotLS0gYS9saWIvaWd0X3Bzci5jCisrKyBiL2xpYi9pZ3RfcHNyLmMKQEAgLTIxLDYg KzIxLDcgQEAKICAqIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCisjaW5jbHVkZSAiaWd0X3BhcmFt cy5oIgogI2luY2x1ZGUgImlndF9wc3IuaCIKICNpbmNsdWRlICJpZ3Rfc3lzZnMuaCIKICNpbmNs dWRlIDxlcnJuby5oPgpkaWZmIC0tZ2l0IGEvbGliL2lndF9zeXNmcy5jIGIvbGliL2lndF9zeXNm cy5jCmluZGV4IDc1MjhjM2JkLi42YWFmZTUzNCAxMDA2NDQKLS0tIGEvbGliL2lndF9zeXNmcy5j CisrKyBiL2xpYi9pZ3Rfc3lzZnMuYwpAQCAtMTM1LDc0ICsxMzUsNiBAQCBpbnQgaWd0X3N5c2Zz X29wZW4oaW50IGRldmljZSkKIAlyZXR1cm4gb3BlbihwYXRoLCBPX1JET05MWSk7CiB9CiAKLS8q KgotICogaWd0X3N5c2ZzX3NldF9wYXJhbWV0ZXJzOgotICogQGRldmljZTogZmQgb2YgdGhlIGRl dmljZQotICogQHBhcmFtZXRlcjogdGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlciB0byBzZXQKLSAq IEBmbXQ6IHByaW50Zi1lc3F1ZSBmb3JtYXQgc3RyaW5nCi0gKgotICogUmV0dXJucyB0cnVlIG9u IHN1Y2Nlc3MKLSAqLwotYm9vbCBpZ3Rfc3lzZnNfc2V0X3BhcmFtZXRlcihpbnQgZGV2aWNlLAot CQkJICAgICBjb25zdCBjaGFyICpwYXJhbWV0ZXIsCi0JCQkgICAgIGNvbnN0IGNoYXIgKmZtdCwg Li4uKQotewotCXZhX2xpc3QgYXA7Ci0JaW50IGRpcjsKLQlpbnQgcmV0OwotCi0JZGlyID0gaWd0 X3N5c2ZzX29wZW5fcGFyYW1ldGVycyhkZXZpY2UpOwotCWlmIChkaXIgPCAwKQotCQlyZXR1cm4g ZmFsc2U7Ci0KLQl2YV9zdGFydChhcCwgZm10KTsKLQlyZXQgPSBpZ3Rfc3lzZnNfdnByaW50Zihk aXIsIHBhcmFtZXRlciwgZm10LCBhcCk7Ci0JdmFfZW5kKGFwKTsKLQotCWNsb3NlKGRpcik7Ci0K LQlyZXR1cm4gcmV0ID4gMDsKLX0KLQotLyoqCi0gKiBpZ3Rfc3lzZnNfb3Blbl9wYXJhbWV0ZXJz OgotICogQGRldmljZTogZmQgb2YgdGhlIGRldmljZQotICoKLSAqIFRoaXMgb3BlbnMgdGhlIG1v ZHVsZSBwYXJhbWV0ZXJzIGRpcmVjdG9yeSAodW5kZXIgc3lzZnMpIGNvcnJlc3BvbmRpbmcKLSAq IHRvIHRoZSBkZXZpY2UgZm9yIHVzZSB3aXRoIGlndF9zeXNmc19zZXQoKSBhbmQgaWd0X3N5c2Zz X2dldCgpLgotICoKLSAqIFJldHVybnM6Ci0gKiBUaGUgZGlyZWN0b3J5IGZkLCBvciAtMSBvbiBm YWlsdXJlLgotICovCi1pbnQgaWd0X3N5c2ZzX29wZW5fcGFyYW1ldGVycyhpbnQgZGV2aWNlKQot ewotCWludCBkaXIsIHBhcmFtcyA9IC0xOwotCi0JZGlyID0gaWd0X3N5c2ZzX29wZW4oZGV2aWNl KTsKLQlpZiAoZGlyID49IDApIHsKLQkJcGFyYW1zID0gb3BlbmF0KGRpciwKLQkJCQkiZGV2aWNl L2RyaXZlci9tb2R1bGUvcGFyYW1ldGVycyIsCi0JCQkJT19SRE9OTFkpOwotCQljbG9zZShkaXIp OwotCX0KLQotCWlmIChwYXJhbXMgPCAwKSB7IC8qIGJ1aWx0aW4/ICovCi0JCWRybV92ZXJzaW9u X3QgdmVyc2lvbjsKLQkJY2hhciBuYW1lWzMyXSA9ICIiOwotCQljaGFyIHBhdGhbUEFUSF9NQVhd OwotCi0JCW1lbXNldCgmdmVyc2lvbiwgMCwgc2l6ZW9mKHZlcnNpb24pKTsKLQkJdmVyc2lvbi5u YW1lX2xlbiA9IHNpemVvZihuYW1lKTsKLQkJdmVyc2lvbi5uYW1lID0gbmFtZTsKLQkJaW9jdGwo ZGV2aWNlLCBEUk1fSU9DVExfVkVSU0lPTiwgJnZlcnNpb24pOwotCi0JCXNwcmludGYocGF0aCwg Ii9zeXMvbW9kdWxlLyVzL3BhcmFtZXRlcnMiLCBuYW1lKTsKLQkJcGFyYW1zID0gb3BlbihwYXRo LCBPX1JET05MWSk7Ci0JfQotCi0JcmV0dXJuIHBhcmFtczsKLX0KLQogLyoqCiAgKiBpZ3Rfc3lz ZnNfd3JpdGU6CiAgKiBAZGlyOiBkaXJlY3RvcnkgZm9yIHRoZSBkZXZpY2UgZnJvbSBpZ3Rfc3lz ZnNfb3BlbigpCmRpZmYgLS1naXQgYS9saWIvaWd0X3N5c2ZzLmggYi9saWIvaWd0X3N5c2ZzLmgK aW5kZXggYjY0NmRmMzAuLjY0OTM1YTVjIDEwMDY0NAotLS0gYS9saWIvaWd0X3N5c2ZzLmgKKysr IGIvbGliL2lndF9zeXNmcy5oCkBAIC0zMCwxMSArMzAsNiBAQAogCiBjaGFyICppZ3Rfc3lzZnNf cGF0aChpbnQgZGV2aWNlLCBjaGFyICpwYXRoLCBpbnQgcGF0aGxlbik7CiBpbnQgaWd0X3N5c2Zz X29wZW4oaW50IGRldmljZSk7Ci1pbnQgaWd0X3N5c2ZzX29wZW5fcGFyYW1ldGVycyhpbnQgZGV2 aWNlKTsKLWJvb2wgaWd0X3N5c2ZzX3NldF9wYXJhbWV0ZXIoaW50IGRldmljZSwKLQkJCSAgICAg Y29uc3QgY2hhciAqcGFyYW1ldGVyLAotCQkJICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKLQlf X2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLDMsNCkpKTsKIAogaW50IGlndF9zeXNmc19yZWFk KGludCBkaXIsIGNvbnN0IGNoYXIgKmF0dHIsIHZvaWQgKmRhdGEsIGludCBsZW4pOwogaW50IGln dF9zeXNmc193cml0ZShpbnQgZGlyLCBjb25zdCBjaGFyICphdHRyLCBjb25zdCB2b2lkICpkYXRh LCBpbnQgbGVuKTsKZGlmZiAtLWdpdCBhL2xpYi9tZXNvbi5idWlsZCBiL2xpYi9tZXNvbi5idWls ZAppbmRleCBlMjA2MDQzMC4uYzlhZjA0MDMgMTAwNjQ0Ci0tLSBhL2xpYi9tZXNvbi5idWlsZAor KysgYi9saWIvbWVzb24uYnVpbGQKQEAgLTE3LDYgKzE3LDcgQEAgbGliX3NvdXJjZXMgPSBbCiAJ J2lndF9oYWxmZmxvYXQuYycsCiAJJ2lndF9tYXRyaXguYycsCiAJJ2lndF9wZXJmLmMnLAorCSdp Z3RfcGFyYW1zLmMnLAogCSdpZ3RfcHJpbWVzLmMnLAogCSdpZ3RfcmFuZC5jJywKIAknaWd0X3Jh cGwuYycsCmRpZmYgLS1naXQgYS90ZXN0cy9pOTE1L2dlbV9jdHhfcGVyc2lzdGVuY2UuYyBiL3Rl c3RzL2k5MTUvZ2VtX2N0eF9wZXJzaXN0ZW5jZS5jCmluZGV4IDNkNTI5ODdkLi45NjViNzg4YiAx MDA2NDQKLS0tIGEvdGVzdHMvaTkxNS9nZW1fY3R4X3BlcnNpc3RlbmNlLmMKKysrIGIvdGVzdHMv aTkxNS9nZW1fY3R4X3BlcnNpc3RlbmNlLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJp Z3RfZHVtbXlsb2FkLmgiCiAjaW5jbHVkZSAiaWd0X2d0LmgiCiAjaW5jbHVkZSAiaWd0X3N5c2Zz LmgiCisjaW5jbHVkZSAiaWd0X3BhcmFtcy5oIgogI2luY2x1ZGUgImlvY3RsX3dyYXBwZXJzLmgi IC8qIGdlbV93YWl0KCkhICovCiAjaW5jbHVkZSAic3dfc3luYy5oIgogCi0tIAoyLjI2LjAKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFp bGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgo=