From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Kocialkowski Subject: [PATCH i-g-t v2 2/3] lib: Add ALSA library with dedicated helpers Date: Mon, 21 Aug 2017 18:27:19 +0300 Message-ID: <20170821152720.5925-3-paul.kocialkowski@linux.intel.com> References: <20170821152720.5925-1-paul.kocialkowski@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 08AE46E282 for ; Mon, 21 Aug 2017 15:27:28 +0000 (UTC) In-Reply-To: <20170821152720.5925-1-paul.kocialkowski@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org VGhpcyBpbnRyb2R1Y2VzIGFuIEFMU0EgbGlicmFyeSwgd2l0aCBkZWRpY2F0ZWQgaGVscGVycyBm b3IgaGFuZGxpbmcKcGxheWJhY2sgYW5kIGNhcHR1cmUuIEl0IGhhbmRsZXMgQUxTQSBkZXZpY2Ug aWRlbnRpZmljYXRpb24gYW5kCmNvbmZpZ3VyYXRpb24gYXMgd2VsbCBhcyBhIHJ1biBsb29wIHdp dGggY2FsbGJhY2sgbWVjaGFuaXNtcyBmb3IgZmVlZGluZwpvdXRwdXQgZGF0YSBhbmQgaGFuZGxp bmcgaW5wdXQgZGF0YS4KClRoaXMgbGlicmFyeSBwYXZlcyB0aGUgd2F5IGZvciB0ZXN0aW5nIGF1 ZGlvIGdvaW5nIHRocm91Z2ggZGlzcGxheQpjb25uZWN0b3JzLCBzdWNoIGFzIEhETUkuCgpTaWdu ZWQtb2ZmLWJ5OiBQYXVsIEtvY2lhbGtvd3NraSA8cGF1bC5rb2NpYWxrb3dza2lAbGludXguaW50 ZWwuY29tPgotLS0KIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgICAzICsKIC4uLi9pbnRlbC1ncHUtdG9vbHMvaW50ZWwtZ3B1LXRvb2xzLWRvY3Mu eG1sICAgICAgIHwgICAxICsKIGxpYi9NYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgICA3ICsKIGxpYi9pZ3QuaCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgICAxICsKIGxpYi9pZ3RfYWxzYS5jICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgNjM3ICsrKysrKysrKysrKysrKysrKysrKwogbGliL2lndF9h bHNhLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNjAgKysKIDYgZmls ZXMgY2hhbmdlZCwgNzA5IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaWd0 X2Fsc2EuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pZ3RfYWxzYS5oCgpkaWZmIC0tZ2l0IGEv Y29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IDUwYWE4NmI1Li5lNjYyNzNhNCAxMDA2 NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMjE5LDYgKzIxOSw5 IEBAIGlmIHRlc3QgIngkZW5hYmxlX2NoYW1lbGl1bSIgPSB4eWVzOyB0aGVuCiAJQUNfREVGSU5F KEhBVkVfQ0hBTUVMSVVNLCAxLCBbRW5hYmxlIENoYW1lbGl1bSBzdXBwb3J0XSkKIGZpCiAKK1BL R19DSEVDS19NT0RVTEVTKEFMU0EsIFthbHNhXSwgW2Fsc2E9eWVzXSwgW2Fsc2E9bm9dKQorQU1f Q09ORElUSU9OQUwoSEFWRV9BTFNBLCBbdGVzdCAieCRhbHNhIiA9IHh5ZXNdKQorCiAjIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiAjCQkJQ29uZmlndXJhdGlvbiBvcHRpb25zCiAjIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCmRpZmYgLS1naXQgYS9kb2NzL3JlZmVyZW5jZS9pbnRlbC1ncHUtdG9vbHMvaW50 ZWwtZ3B1LXRvb2xzLWRvY3MueG1sIGIvZG9jcy9yZWZlcmVuY2UvaW50ZWwtZ3B1LXRvb2xzL2lu dGVsLWdwdS10b29scy1kb2NzLnhtbAppbmRleCBjNzcxNTljZi4uMGMzNGU0YTUgMTAwNjQ0Ci0t LSBhL2RvY3MvcmVmZXJlbmNlL2ludGVsLWdwdS10b29scy9pbnRlbC1ncHUtdG9vbHMtZG9jcy54 bWwKKysrIGIvZG9jcy9yZWZlcmVuY2UvaW50ZWwtZ3B1LXRvb2xzL2ludGVsLWdwdS10b29scy1k b2NzLnhtbApAQCAtMTYsNiArMTYsNyBAQAogICA8Y2hhcHRlcj4KICAgICA8dGl0bGU+QVBJIFJl ZmVyZW5jZTwvdGl0bGU+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2RybXRlc3QueG1sIi8+ CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF9hbHNhLnhtbCIvPgogICAgIDx4aTppbmNs dWRlIGhyZWY9InhtbC9pZ3RfYXVkaW8ueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1s L2lndF9hdXgueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF9jaGFtZWxpdW0u eG1sIi8+CmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUuYW0gYi9saWIvTWFrZWZpbGUuYW0KaW5k ZXggNWVhMDgzMTQuLjNmZjE0ZjY2IDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUuYW0KKysrIGIv bGliL01ha2VmaWxlLmFtCkBAIC0zOCw2ICszOCwxMyBAQCBsaWJfc291cmNlX2xpc3QgKz0JCVwK IAkkKE5VTEwpCiBlbmRpZgogCitpZiBIQVZFX0FMU0EKK2xpYl9zb3VyY2VfbGlzdCArPQkJXAor CWlndF9hbHNhLmMJCVwKKwlpZ3RfYWxzYS5oCQlcCisJJChOVUxMKQorZW5kaWYKKwogQU1fQ1BQ RkxBR1MgPSAtSSQodG9wX3NyY2RpcikKIEFNX0NGTEFHUyA9IFwKIAkgICAgJChDV0FSTkZMQUdT KSBcCmRpZmYgLS1naXQgYS9saWIvaWd0LmggYi9saWIvaWd0LmgKaW5kZXggYTc1ZDJkYjcuLmVi ZjkyMzQ5IDEwMDY0NAotLS0gYS9saWIvaWd0LmgKKysrIGIvbGliL2lndC5oCkBAIC0zNSw2ICsz NSw3IEBACiAjaW5jbHVkZSAiaWd0X2R1bW15bG9hZC5oIgogI2luY2x1ZGUgImlndF9mYi5oIgog I2luY2x1ZGUgImlndF9mcmFtZS5oIgorI2luY2x1ZGUgImlndF9hbHNhLmgiCiAjaW5jbHVkZSAi aWd0X2F1ZGlvLmgiCiAjaW5jbHVkZSAiaWd0X2d0LmgiCiAjaW5jbHVkZSAiaWd0X2ttcy5oIgpk aWZmIC0tZ2l0IGEvbGliL2lndF9hbHNhLmMgYi9saWIvaWd0X2Fsc2EuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMC4uYjU1NzRjNzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIv aWd0X2Fsc2EuYwpAQCAtMCwwICsxLDYzNyBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE3IElu dGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBz b2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJl IiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNs dWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBz ZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9t IHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBm b2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3Jh cGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O SU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlS SUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisg KiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U SEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRX QVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgUGF1bCBLb2NpYWxrb3dza2kgPHBhdWwua29jaWFs a293c2tpQGxpbnV4LmludGVsLmNvbT4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp bmNsdWRlIDxhbHNhL2Fzb3VuZGxpYi5oPgorCisjaW5jbHVkZSAiaWd0LmgiCisKKyNkZWZpbmUg SEFORExFU19NQVgJOAorCisvKioKKyAqIFNFQ1RJT046aWd0X2Fsc2EKKyAqIEBzaG9ydF9kZXNj cmlwdGlvbjogTGlicmFyeSB3aXRoIEFMU0EgaGVscGVycworICogQHRpdGxlOiBBTFNBCisgKiBA aW5jbHVkZTogaWd0X2Fsc2EuaAorICoKKyAqIFRoaXMgbGlicmFyeSBjb250YWlucyBoZWxwZXJz IGZvciBBTFNBIHBsYXliYWNrIGFuZCBjYXB0dXJlLgorICovCisKK3N0cnVjdCBhbHNhIHsKKwlz bmRfcGNtX3QgKm91dHB1dF9oYW5kbGVzW0hBTkRMRVNfTUFYXTsKKwlpbnQgb3V0cHV0X2hhbmRs ZXNfY291bnQ7CisJaW50IG91dHB1dF9zYW1wbGluZ19yYXRlOworCWludCBvdXRwdXRfY2hhbm5l bHM7CisKKwlpbnQgKCpvdXRwdXRfY2FsbGJhY2spKHZvaWQgKmRhdGEsIHNob3J0ICpidWZmZXIs IGludCBzYW1wbGVzKTsKKwl2b2lkICpvdXRwdXRfY2FsbGJhY2tfZGF0YTsKKwlpbnQgb3V0cHV0 X3NhbXBsZXNfdHJpZ2dlcjsKKworCXNuZF9wY21fdCAqaW5wdXRfaGFuZGxlOworCWludCBpbnB1 dF9zYW1wbGluZ19yYXRlOworCWludCBpbnB1dF9jaGFubmVsczsKKworCWludCAoKmlucHV0X2Nh bGxiYWNrKSh2b2lkICpkYXRhLCBzaG9ydCAqYnVmZmVyLCBpbnQgc2FtcGxlcyk7CisJdm9pZCAq aW5wdXRfY2FsbGJhY2tfZGF0YTsKKwlpbnQgaW5wdXRfc2FtcGxlc190cmlnZ2VyOworfTsKKwor c3RhdGljIHZvaWQgYWxzYV9lcnJvcl9oYW5kbGVyKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5l LCBjb25zdCBjaGFyICpmdW5jdGlvbiwKKwkJCSAgICAgICBpbnQgZXJyLCBjb25zdCBjaGFyICpm bXQsIC4uLikKK3sKKwlpZiAoZXJyKQorCQlpZ3RfZGVidWcoIltBTFNBXSAlczogJXNcbiIsIGZ1 bmN0aW9uLCBzbmRfc3RyZXJyb3IoZXJyKSk7Cit9CisKKy8qKgorICogYWxzYV9pbml0OgorICog QWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gYWxzYSBzdHJ1Y3R1cmUgYW5kIGNvbmZpZ3VyZSB0 aGUgZXJyb3IgaGFuZGxlci4KKyAqCisgKiBSZXR1cm5zOiBBIG5ld2x5LWFsbG9jYXRlZCBhbHNh IHN0cnVjdHVyZQorICovCitzdHJ1Y3QgYWxzYSAqYWxzYV9pbml0KHZvaWQpCit7CisJc3RydWN0 IGFsc2EgKmFsc2E7CisKKwlhbHNhID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWxzYSkpOworCW1l bXNldChhbHNhLCAwLCBzaXplb2Yoc3RydWN0IGFsc2EpKTsKKworCS8qIFJlZGlyZWN0IGVycm9y cyB0byBpZ3RfZGVidWcgaW5zdGVhZCBvZiBzdGRlcnIuICovCisJc25kX2xpYl9lcnJvcl9zZXRf aGFuZGxlcihhbHNhX2Vycm9yX2hhbmRsZXIpOworCisJcmV0dXJuIGFsc2E7Cit9CisKK3N0YXRp YyBjaGFyICphbHNhX3Jlc29sdmVfaW5kZW50aWZpZXIoY29uc3QgY2hhciAqZGV2aWNlX25hbWUs IGludCBza2lwKQoreworCXNuZF9jdGxfY2FyZF9pbmZvX3QgKmNhcmRfaW5mbzsKKwlzbmRfcGNt X2luZm9fdCAqcGNtX2luZm87CisJc25kX2N0bF90ICpoYW5kbGUgPSBOVUxMOworCWNvbnN0IGNo YXIgKnBjbV9uYW1lOworCWNoYXIgKmlkZW50aWZpZXIgPSBOVUxMOworCWNoYXIgbmFtZVszMl07 CisJaW50IGNhcmQgPSAtMTsKKwlpbnQgZGV2OworCWludCByZXQ7CisKKwlzbmRfY3RsX2NhcmRf aW5mb19hbGxvY2EoJmNhcmRfaW5mbyk7CisJc25kX3BjbV9pbmZvX2FsbG9jYSgmcGNtX2luZm8p OworCisJLyogRmlyc3QgdHJ5IHRvIG9wZW4gdGhlIGRldmljZSBhcy1pcy4gKi8KKwlpZiAoIXNr aXApIHsKKwkJcmV0ID0gc25kX2N0bF9vcGVuKCZoYW5kbGUsIGRldmljZV9uYW1lLCAwKTsKKwkJ aWYgKCFyZXQpIHsKKwkJCWlkZW50aWZpZXIgPSBzdHJkdXAoZGV2aWNlX25hbWUpOworCQkJZ290 byByZXNvbHZlZDsKKwkJfQorCX0KKworCWRvIHsKKwkJcmV0ID0gc25kX2NhcmRfbmV4dCgmY2Fy ZCk7CisJCWlmIChyZXQgPCAwIHx8IGNhcmQgPCAwKQorCQkJYnJlYWs7CisKKwkJc25wcmludGYo bmFtZSwgc2l6ZW9mKG5hbWUpLCAiaHc6JWQiLCBjYXJkKTsKKworCQlyZXQgPSBzbmRfY3RsX29w ZW4oJmhhbmRsZSwgbmFtZSwgMCk7CisJCWlmIChyZXQgPCAwKQorCQkJY29udGludWU7CisKKwkJ cmV0ID0gc25kX2N0bF9jYXJkX2luZm8oaGFuZGxlLCBjYXJkX2luZm8pOworCQlpZiAocmV0IDwg MCkgeworCQkJc25kX2N0bF9jbG9zZShoYW5kbGUpOworCQkJaGFuZGxlID0gTlVMTDsKKwkJCWNv bnRpbnVlOworCQl9CisKKwkJZGV2ID0gLTE7CisKKwkJZG8geworCQkJcmV0ID0gc25kX2N0bF9w Y21fbmV4dF9kZXZpY2UoaGFuZGxlLCAmZGV2KTsKKwkJCWlmIChyZXQgPCAwIHx8IGRldiA8IDAp CisJCQkJYnJlYWs7CisKKwkJCXNuZF9wY21faW5mb19zZXRfZGV2aWNlKHBjbV9pbmZvLCBkZXYp OworCQkJc25kX3BjbV9pbmZvX3NldF9zdWJkZXZpY2UocGNtX2luZm8sIDApOworCisJCQlyZXQg PSBzbmRfY3RsX3BjbV9pbmZvKGhhbmRsZSwgcGNtX2luZm8pOworCQkJaWYgKHJldCA8IDApCisJ CQkJY29udGludWU7CisKKwkJCXBjbV9uYW1lID0gc25kX3BjbV9pbmZvX2dldF9uYW1lKHBjbV9p bmZvKTsKKwkJCWlmICghcGNtX25hbWUpCisJCQkJY29udGludWU7CisKKwkJCXJldCA9IHN0cm5j bXAoZGV2aWNlX25hbWUsIHBjbV9uYW1lLAorCQkJCSAgICAgIHN0cmxlbihkZXZpY2VfbmFtZSkp OworCisJCQlpZiAocmV0ID09IDApIHsKKwkJCQlpZiAoc2tpcCA+IDApIHsKKwkJCQkJc2tpcC0t OworCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFt ZSksICJodzolZCwlZCIsIGNhcmQsCisJCQkJCSBkZXYpOworCisJCQkJaWRlbnRpZmllciA9IHN0 cmR1cChuYW1lKTsKKwkJCQlnb3RvIHJlc29sdmVkOworCQkJfQorCQl9IHdoaWxlIChkZXYgPj0g MCk7CisKKwkJc25kX2N0bF9jbG9zZShoYW5kbGUpOworCQloYW5kbGUgPSBOVUxMOworCX0gd2hp bGUgKGNhcmQgPj0gMCk7CisKK3Jlc29sdmVkOgorCWlmIChoYW5kbGUpCisJCXNuZF9jdGxfY2xv c2UoaGFuZGxlKTsKKworCXJldHVybiBpZGVudGlmaWVyOworfQorCisvKioKKyAqIGFsc2Ffb3Bl bl9vdXRwdXQ6CisgKiBAYWxzYTogVGhlIHRhcmdldCBhbHNhIHN0cnVjdHVyZQorICogQGRldmlj ZV9uYW1lOiBUaGUgbmFtZSBwcmVmaXggb2YgdGhlIG91dHB1dCBkZXZpY2UocykgdG8gb3Blbgor ICoKKyAqIE9wZW4gQUxTQSBvdXRwdXQgZGV2aWNlcyB3aG9zZSBuYW1lIHByZWZpeGVzIG1hdGNo IHRoZSBwcm92aWRlZCBuYW1lIHByZWZpeC4KKyAqCisgKiBSZXR1cm5zOiBBbiBpbnRlZ2VyIGVx dWFsIHRvIHplcm8gZm9yIHN1Y2Nlc3MgYW5kIG5lZ2F0aXZlIGZvciBmYWlsdXJlCisgKi8KK2lu dCBhbHNhX29wZW5fb3V0cHV0KHN0cnVjdCBhbHNhICphbHNhLCBjb25zdCBjaGFyICpkZXZpY2Vf bmFtZSkKK3sKKwlzbmRfcGNtX3QgKmhhbmRsZTsKKwljaGFyICppZGVudGlmaWVyOworCWludCBz a2lwOworCWludCBpbmRleDsKKwlpbnQgcmV0OworCisJc2tpcCA9IGFsc2EtPm91dHB1dF9oYW5k bGVzX2NvdW50OworCWluZGV4ID0gYWxzYS0+b3V0cHV0X2hhbmRsZXNfY291bnQ7CisKKwl3aGls ZSAoaW5kZXggPCBIQU5ETEVTX01BWCkgeworCQlpZGVudGlmaWVyID0gYWxzYV9yZXNvbHZlX2lu ZGVudGlmaWVyKGRldmljZV9uYW1lLCBza2lwKyspOworCQlpZiAoIWlkZW50aWZpZXIpCisJCQli cmVhazsKKworCQlyZXQgPSBzbmRfcGNtX29wZW4oJmhhbmRsZSwgaWRlbnRpZmllciwgU05EX1BD TV9TVFJFQU1fUExBWUJBQ0ssCisJCQkJICAgU05EX1BDTV9OT05CTE9DSyk7CisJCWlmIChyZXQg PCAwKSB7CisJCQlmcmVlKGlkZW50aWZpZXIpOworCQkJY29udGludWU7CisJCX0KKworCQlpZ3Rf ZGVidWcoIk9wZW5lZCBvdXRwdXQgJXNcbiIsIGlkZW50aWZpZXIpOworCisJCWFsc2EtPm91dHB1 dF9oYW5kbGVzW2luZGV4KytdID0gaGFuZGxlOworCQlmcmVlKGlkZW50aWZpZXIpOworCX0KKwor CWlmIChpbmRleCA9PSAwKQorCQlyZXR1cm4gLTE7CisKKwlhbHNhLT5vdXRwdXRfaGFuZGxlc19j b3VudCA9IGluZGV4OworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYWxzYV9vcGVuX2lucHV0 OgorICogQGFsc2E6IFRoZSB0YXJnZXQgYWxzYSBzdHJ1Y3R1cmUKKyAqIEBkZXZpY2VfbmFtZTog VGhlIG5hbWUgb2YgdGhlIGlucHV0IGRldmljZSB0byBvcGVuCisgKgorICogT3BlbiB0aGUgQUxT QSBpbnB1dCBkZXZpY2Ugd2hvc2UgbmFtZSBtYXRjaGVzIHRoZSBwcm92aWRlZCBuYW1lIHByZWZp eC4KKyAqCisgKiBSZXR1cm5zOiBBbiBpbnRlZ2VyIGVxdWFsIHRvIHplcm8gZm9yIHN1Y2Nlc3Mg YW5kIG5lZ2F0aXZlIGZvciBmYWlsdXJlCisgKi8KK2ludCBhbHNhX29wZW5faW5wdXQoc3RydWN0 IGFsc2EgKmFsc2EsIGNvbnN0IGNoYXIgKmRldmljZV9uYW1lKQoreworCXNuZF9wY21fdCAqaGFu ZGxlOworCWNoYXIgKmlkZW50aWZpZXI7CisJaW50IHJldDsKKworCWlkZW50aWZpZXIgPSBhbHNh X3Jlc29sdmVfaW5kZW50aWZpZXIoZGV2aWNlX25hbWUsIDApOworCisJcmV0ID0gc25kX3BjbV9v cGVuKCZoYW5kbGUsIGRldmljZV9uYW1lLCBTTkRfUENNX1NUUkVBTV9DQVBUVVJFLAorCQkJICAg U05EX1BDTV9OT05CTE9DSyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gY29tcGxldGU7CisKKwlp Z3RfZGVidWcoIk9wZW5lZCBpbnB1dCAlc1xuIiwgaWRlbnRpZmllcik7CisKKwlhbHNhLT5pbnB1 dF9oYW5kbGUgPSBoYW5kbGU7CisKKwlyZXQgPSAwOworCitjb21wbGV0ZToKKwlmcmVlKGlkZW50 aWZpZXIpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBhbHNhX2Nsb3NlX291dHB1dDoK KyAqIEBhbHNhOiBUaGUgdGFyZ2V0IGFsc2Egc3RydWN0dXJlCisgKgorICogQ2xvc2UgYWxsIHRo ZSBvcGVuIEFMU0Egb3V0cHV0cy4KKyAqLwordm9pZCBhbHNhX2Nsb3NlX291dHB1dChzdHJ1Y3Qg YWxzYSAqYWxzYSkKK3sKKwlzbmRfcGNtX3QgKmhhbmRsZTsKKwlpbnQgaTsKKworCWZvciAoaSA9 IDA7IGkgPCBhbHNhLT5vdXRwdXRfaGFuZGxlc19jb3VudDsgaSsrKSB7CisJCWhhbmRsZSA9IGFs c2EtPm91dHB1dF9oYW5kbGVzW2ldOworCQlpZiAoIWhhbmRsZSkKKwkJCWNvbnRpbnVlOworCisJ CXNuZF9wY21fY2xvc2UoaGFuZGxlKTsKKwkJYWxzYS0+b3V0cHV0X2hhbmRsZXNbaV0gPSBOVUxM OworCX0KKworCWFsc2EtPm91dHB1dF9oYW5kbGVzX2NvdW50ID0gMDsKKworCWFsc2EtPm91dHB1 dF9jYWxsYmFjayA9IE5VTEw7Cit9CisKKy8qKgorICogYWxzYV9jbG9zZV9vdXRwdXQ6CisgKiBA YWxzYTogVGhlIHRhcmdldCBhbHNhIHN0cnVjdHVyZQorICoKKyAqIENsb3NlIHRoZSBvcGVuIEFM U0EgaW5wdXQuCisgKi8KK3ZvaWQgYWxzYV9jbG9zZV9pbnB1dChzdHJ1Y3QgYWxzYSAqYWxzYSkK K3sKKwlzbmRfcGNtX3QgKmhhbmRsZSA9IGFsc2EtPmlucHV0X2hhbmRsZTsKKwlpZiAoIWhhbmRs ZSkKKwkJcmV0dXJuOworCisJc25kX3BjbV9jbG9zZShoYW5kbGUpOworCWFsc2EtPmlucHV0X2hh bmRsZSA9IE5VTEw7CisKKwlhbHNhLT5pbnB1dF9jYWxsYmFjayA9IE5VTEw7Cit9CisKK3N0YXRp YyBib29sIGFsc2FfdGVzdF9jb25maWd1cmF0aW9uKHNuZF9wY21fdCAqaGFuZGxlLCBpbnQgY2hh bm5lbHMsCisJCQkgICAgIGludCBzYW1wbGluZ19yYXRlKQoreworCXNuZF9wY21faHdfcGFyYW1z X3QgKnBhcmFtczsKKwlpbnQgcmV0OworCisJc25kX3BjbV9od19wYXJhbXNfYWxsb2NhKCZwYXJh bXMpOworCisJcmV0ID0gc25kX3BjbV9od19wYXJhbXNfYW55KGhhbmRsZSwgcGFyYW1zKTsKKwlp ZiAocmV0IDwgMCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0ID0gc25kX3BjbV9od19wYXJhbXNf dGVzdF9yYXRlKGhhbmRsZSwgcGFyYW1zLCBzYW1wbGluZ19yYXRlLCAwKTsKKwlpZiAocmV0IDwg MCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0ID0gc25kX3BjbV9od19wYXJhbXNfdGVzdF9jaGFu bmVscyhoYW5kbGUsIHBhcmFtcywgY2hhbm5lbHMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4g ZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiBhbHNhX3Rlc3Rfb3V0cHV0X2Nv bmZpZ3VyYXRpb246CisgKiBAYWxzYTogVGhlIHRhcmdldCBhbHNhIHN0cnVjdHVyZQorICogQGNo YW5uZWxzOiBUaGUgbnVtYmVyIG9mIGNoYW5uZWxzIHRvIHRlc3QKKyAqIEBzYW1wbGluZ19yYXRl OiBUaGUgc2FtcGxpbmcgcmF0ZSB0byB0ZXN0CisgKgorICogVGVzdCB0aGUgb3V0cHV0IGNvbmZp Z3VyYXRpb24gc3BlY2lmaWVkIGJ5IEBjaGFubmVscyBhbmQgQHNhbXBsaW5nX3JhdGUKKyAqIGZv ciB0aGUgb3V0cHV0IGRldmljZXMuCisgKgorICogUmV0dXJuczogQSBib29sZWFuIGluZGljYXRp bmcgd2hldGhlciB0aGUgdGVzdCBzdWNjZWVkZWQKKyAqLworYm9vbCBhbHNhX3Rlc3Rfb3V0cHV0 X2NvbmZpZ3VyYXRpb24oc3RydWN0IGFsc2EgKmFsc2EsIGludCBjaGFubmVscywKKwkJCQkgICAg aW50IHNhbXBsaW5nX3JhdGUpCit7CisJc25kX3BjbV90ICpoYW5kbGU7CisJYm9vbCByZXQ7CisJ aW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWxzYS0+b3V0cHV0X2hhbmRsZXNfY291bnQ7IGkr KykgeworCQloYW5kbGUgPSBhbHNhLT5vdXRwdXRfaGFuZGxlc1tpXTsKKworCQlyZXQgPSBhbHNh X3Rlc3RfY29uZmlndXJhdGlvbihoYW5kbGUsIGNoYW5uZWxzLCBzYW1wbGluZ19yYXRlKTsKKwkJ aWYgKCFyZXQpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8q KgorICogYWxzYV90ZXN0X2lucHV0X2NvbmZpZ3VyYXRpb246CisgKiBAYWxzYTogVGhlIHRhcmdl dCBhbHNhIHN0cnVjdHVyZQorICogQGNoYW5uZWxzOiBUaGUgbnVtYmVyIG9mIGNoYW5uZWxzIHRv IHRlc3QKKyAqIEBzYW1wbGluZ19yYXRlOiBUaGUgc2FtcGxpbmcgcmF0ZSB0byB0ZXN0CisgKgor ICogVGVzdCB0aGUgaW5wdXQgY29uZmlndXJhdGlvbiBzcGVjaWZpZWQgYnkgQGNoYW5uZWxzIGFu ZCBAc2FtcGxpbmdfcmF0ZQorICogZm9yIHRoZSBpbnB1dCBkZXZpY2UuCisgKgorICogUmV0dXJu czogQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgdGVzdCBzdWNjZWVkZWQKKyAqLwor Ym9vbCBhbHNhX3Rlc3RfaW5wdXRfY29uZmlndXJhdGlvbihzdHJ1Y3QgYWxzYSAqYWxzYSwgaW50 IGNoYW5uZWxzLAorCQkJCSAgIGludCBzYW1wbGluZ19yYXRlKQoreworCXJldHVybiBhbHNhX3Rl c3RfY29uZmlndXJhdGlvbihhbHNhLT5pbnB1dF9oYW5kbGUsIGNoYW5uZWxzLAorCQkJCSAgICAg ICBzYW1wbGluZ19yYXRlKTsKK30KKworLyoqCisgKiBhbHNhX2NvbmZpZ3VyZV9vdXRwdXQ6Cisg KiBAYWxzYTogVGhlIHRhcmdldCBhbHNhIHN0cnVjdHVyZQorICogQGNoYW5uZWxzOiBUaGUgbnVt YmVyIG9mIGNoYW5uZWxzIHRvIHRlc3QKKyAqIEBzYW1wbGluZ19yYXRlOiBUaGUgc2FtcGxpbmcg cmF0ZSB0byB0ZXN0CisgKgorICogQ29uZmlndXJlIHRoZSBvdXRwdXQgZGV2aWNlcyB3aXRoIHRo ZSBjb25maWd1cmF0aW9uIHNwZWNpZmllZCBieSBAY2hhbm5lbHMKKyAqIGFuZCBAc2FtcGxpbmdf cmF0ZS4KKyAqLwordm9pZCBhbHNhX2NvbmZpZ3VyZV9vdXRwdXQoc3RydWN0IGFsc2EgKmFsc2Es IGludCBjaGFubmVscywKKwkJCSAgIGludCBzYW1wbGluZ19yYXRlKQoreworCXNuZF9wY21fdCAq aGFuZGxlOworCWludCByZXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWxzYS0+b3V0 cHV0X2hhbmRsZXNfY291bnQ7IGkrKykgeworCQloYW5kbGUgPSBhbHNhLT5vdXRwdXRfaGFuZGxl c1tpXTsKKworCQlyZXQgPSBzbmRfcGNtX3NldF9wYXJhbXMoaGFuZGxlLCBTTkRfUENNX0ZPUk1B VF9TMTZfTEUsCisJCQkJCSBTTkRfUENNX0FDQ0VTU19SV19JTlRFUkxFQVZFRCwKKwkJCQkJIGNo YW5uZWxzLCBzYW1wbGluZ19yYXRlLCAwLCAwKTsKKwkJaWd0X2Fzc2VydChyZXQgPj0gMCk7CisJ fQorCisJYWxzYS0+b3V0cHV0X2NoYW5uZWxzID0gY2hhbm5lbHM7CisJYWxzYS0+b3V0cHV0X3Nh bXBsaW5nX3JhdGUgPSBzYW1wbGluZ19yYXRlOworfQorCisvKioKKyAqIGFsc2FfY29uZmlndXJl X2lucHV0OgorICogQGFsc2E6IFRoZSB0YXJnZXQgYWxzYSBzdHJ1Y3R1cmUKKyAqIEBjaGFubmVs czogVGhlIG51bWJlciBvZiBjaGFubmVscyB0byB0ZXN0CisgKiBAc2FtcGxpbmdfcmF0ZTogVGhl IHNhbXBsaW5nIHJhdGUgdG8gdGVzdAorICoKKyAqIENvbmZpZ3VyZSB0aGUgaW5wdXQgZGV2aWNl IHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVkIGJ5IEBjaGFubmVscworICogYW5kIEBz YW1wbGluZ19yYXRlLgorICovCit2b2lkIGFsc2FfY29uZmlndXJlX2lucHV0KHN0cnVjdCBhbHNh ICphbHNhLCBpbnQgY2hhbm5lbHMsCisJCQkgIGludCBzYW1wbGluZ19yYXRlKQoreworCXNuZF9w Y21fdCAqaGFuZGxlOworCWludCByZXQ7CisKKwloYW5kbGUgPSBhbHNhLT5pbnB1dF9oYW5kbGU7 CisKKwlyZXQgPSBzbmRfcGNtX3NldF9wYXJhbXMoaGFuZGxlLCBTTkRfUENNX0ZPUk1BVF9TMTZf TEUsCisJCQkJIFNORF9QQ01fQUNDRVNTX1JXX0lOVEVSTEVBVkVELCBjaGFubmVscywKKwkJCQkg c2FtcGxpbmdfcmF0ZSwgMCwgMCk7CisJaWd0X2Fzc2VydChyZXQgPj0gMCk7CisKKwlhbHNhLT5p bnB1dF9jaGFubmVscyA9IGNoYW5uZWxzOworCWFsc2EtPmlucHV0X3NhbXBsaW5nX3JhdGUgPSBz YW1wbGluZ19yYXRlOworCit9CisKKy8qKgorICogYWxzYV9yZWdpc3Rlcl9vdXRwdXRfY2FsbGJh Y2s6CisgKiBAYWxzYTogVGhlIHRhcmdldCBhbHNhIHN0cnVjdHVyZQorICogQGNhbGxiYWNrOiBU aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gY2FsbCB0byBmaWxsIG91dHB1dCBkYXRhCisgKiBAY2Fs bGJhY2tfZGF0YTogVGhlIGRhdGEgcG9pbnRlciB0byBwYXNzIHRvIHRoZSBjYWxsYmFjayBmdW5j dGlvbgorICogQHNhbXBsZXNfdHJpZ2dlcjogVGhlIHJlcXVpcmVkIG51bWJlciBvZiBzYW1wbGVz IHRvIHRyaWdnZXIgdGhlIGNhbGxiYWNrCisgKgorICogUmVnaXN0ZXIgYSBjYWxsYmFjayBmdW5j dGlvbiB0byBiZSBjYWxsZWQgdG8gZmlsbCBvdXRwdXQgZGF0YSBkdXJpbmcgYSBydW4uCisgKiBU aGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gQHNhbXBsZXNfdHJpZ2dlciBzYW1wbGVzIGFyZSBy ZXF1aXJlZC4KKyAqCisgKiBUaGUgY2FsbGJhY2sgc2hvdWxkIHJldHVybiBhbiBpbnRlZ2VyIGVx dWFsIHRvIHplcm8gZm9yIHN1Y2Nlc3MgYW5kIG5lZ2F0aXZlCisgKiBmb3IgZmFpbHVyZS4KKyAq Lwordm9pZCBhbHNhX3JlZ2lzdGVyX291dHB1dF9jYWxsYmFjayhzdHJ1Y3QgYWxzYSAqYWxzYSwK KwkJCQkgICBpbnQgKCpjYWxsYmFjaykodm9pZCAqZGF0YSwgc2hvcnQgKmJ1ZmZlciwgaW50IHNh bXBsZXMpLAorCQkJCSAgIHZvaWQgKmNhbGxiYWNrX2RhdGEsIGludCBzYW1wbGVzX3RyaWdnZXIp Cit7CisJYWxzYS0+b3V0cHV0X2NhbGxiYWNrID0gY2FsbGJhY2s7CisJYWxzYS0+b3V0cHV0X2Nh bGxiYWNrX2RhdGEgPSBjYWxsYmFja19kYXRhOworCWFsc2EtPm91dHB1dF9zYW1wbGVzX3RyaWdn ZXIgPSBzYW1wbGVzX3RyaWdnZXI7Cit9CisKKy8qKgorICogYWxzYV9yZWdpc3Rlcl9pbnB1dF9j YWxsYmFjazoKKyAqIEBhbHNhOiBUaGUgdGFyZ2V0IGFsc2Egc3RydWN0dXJlCisgKiBAY2FsbGJh Y2s6IFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdoZW4gaW5wdXQgZGF0YSBpcyBhdmFp bGFibGUKKyAqIEBjYWxsYmFja19kYXRhOiBUaGUgZGF0YSBwb2ludGVyIHRvIHBhc3MgdG8gdGhl IGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBAc2FtcGxlc190cmlnZ2VyOiBUaGUgcmVxdWlyZWQgbnVt YmVyIG9mIHNhbXBsZXMgdG8gdHJpZ2dlciB0aGUgY2FsbGJhY2sKKyAqCisgKiBSZWdpc3RlciBh IGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIGlucHV0IGRhdGEgaXMgYXZhaWxh YmxlIGR1cmluZworICogYSBydW4uIFRoZSBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiBAc2FtcGxl c190cmlnZ2VyIHNhbXBsZXMgYXJlIGF2YWlsYWJsZS4KKyAqCisgKiBUaGUgY2FsbGJhY2sgc2hv dWxkIHJldHVybiBhbiBpbnRlZ2VyIGVxdWFsIHRvIHplcm8gZm9yIHN1Y2Nlc3MsIG5lZ2F0aXZl IGZvcgorICogZmFpbHVyZSBhbmQgcG9zaXRpdmUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcnVuIHNo b3VsZCBzdG9wLgorICovCit2b2lkIGFsc2FfcmVnaXN0ZXJfaW5wdXRfY2FsbGJhY2soc3RydWN0 IGFsc2EgKmFsc2EsCisJCQkJICBpbnQgKCpjYWxsYmFjaykodm9pZCAqZGF0YSwgc2hvcnQgKmJ1 ZmZlciwgaW50IHNhbXBsZXMpLAorCQkJCSAgdm9pZCAqY2FsbGJhY2tfZGF0YSwgaW50IHNhbXBs ZXNfdHJpZ2dlcikKK3sKKwlhbHNhLT5pbnB1dF9jYWxsYmFjayA9IGNhbGxiYWNrOworCWFsc2Et PmlucHV0X2NhbGxiYWNrX2RhdGEgPSBjYWxsYmFja19kYXRhOworCWFsc2EtPmlucHV0X3NhbXBs ZXNfdHJpZ2dlciA9IHNhbXBsZXNfdHJpZ2dlcjsKK30KKworLyoqCisgKiBhbHNhX3J1bjoKKyAq IEBhbHNhOiBUaGUgdGFyZ2V0IGFsc2Egc3RydWN0dXJlCisgKiBAZHVyYXRpb25fbXM6IFRoZSBt YXhpbXVtIGR1cmF0aW9uIG9mIHRoZSBydW4gaW4gbWlsbGlzZWNvbmRzCisgKgorICogUnVuIEFM U0EgcGxheWJhY2sgYW5kIGNhcHR1cmUgb24gdGhlIGlucHV0IGFuZCBvdXRwdXQgZGV2aWNlcyBm b3IgYXQKKyAqIG1vc3QgQGR1cmF0aW9uX21zIG1pbGxpc2Vjb25kcywgY2FsbGluZyB0aGUgcmVn aXN0ZXJlZCBjYWxsYmFja3Mgd2hlbiBuZWVkZWQuCisgKgorICogUmV0dXJuczogQW4gaW50ZWdl ciBlcXVhbCB0byB6ZXJvIGZvciBzdWNjZXNzLCBwb3NpdGl2ZSBmb3IgYSBzdG9wIGNhdXNlZAor ICogYnkgdGhlIGlucHV0IGNhbGxiYWNrIGFuZCBuZWdhdGl2ZSBmb3IgZmFpbHVyZQorICovCitp bnQgYWxzYV9ydW4oc3RydWN0IGFsc2EgKmFsc2EsIGludCBkdXJhdGlvbl9tcykKK3sKKwlzbmRf cGNtX3QgKmhhbmRsZTsKKwlzaG9ydCAqb3V0cHV0X2J1ZmZlciA9IE5VTEw7CisJc2hvcnQgKmlu cHV0X2J1ZmZlciA9IE5VTEw7CisJaW50IG91dHB1dF9saW1pdDsKKwlpbnQgb3V0cHV0X3RvdGFs ID0gMDsKKwlpbnQgb3V0cHV0X2NvdW50c1thbHNhLT5vdXRwdXRfaGFuZGxlc19jb3VudF07CisJ Ym9vbCBvdXRwdXRfcmVhZHkgPSBmYWxzZTsKKwlpbnQgb3V0cHV0X2NoYW5uZWxzOworCWludCBv dXRwdXRfdHJpZ2dlcjsKKwlpbnQgaW5wdXRfbGltaXQ7CisJaW50IGlucHV0X3RvdGFsID0gMDsK KwlpbnQgaW5wdXRfY291bnQgPSAwOworCWludCBpbnB1dF9jaGFubmVsczsKKwlpbnQgaW5wdXRf dHJpZ2dlcjsKKwlib29sIHJlYWNoZWQ7CisJaW50IGluZGV4OworCWludCBjb3VudDsKKwlpbnQg YXZhaWw7CisJaW50IGk7CisJaW50IHJldDsKKworCW91dHB1dF9saW1pdCA9IGFsc2EtPm91dHB1 dF9zYW1wbGluZ19yYXRlICogZHVyYXRpb25fbXMgLyAxMDAwOworCW91dHB1dF9jaGFubmVscyA9 IGFsc2EtPm91dHB1dF9jaGFubmVsczsKKwlvdXRwdXRfdHJpZ2dlciA9IGFsc2EtPm91dHB1dF9z YW1wbGVzX3RyaWdnZXI7CisJb3V0cHV0X2J1ZmZlciA9IG1hbGxvYyhzaXplb2Yoc2hvcnQpICog b3V0cHV0X2NoYW5uZWxzICoKKwkJCSAgICAgICBvdXRwdXRfdHJpZ2dlcik7CisKKwlpZiAoYWxz YS0+aW5wdXRfY2FsbGJhY2spIHsKKwkJaW5wdXRfbGltaXQgPSBhbHNhLT5pbnB1dF9zYW1wbGlu Z19yYXRlICogZHVyYXRpb25fbXMgLyAxMDAwOworCQlpbnB1dF90cmlnZ2VyID0gYWxzYS0+aW5w dXRfc2FtcGxlc190cmlnZ2VyOworCQlpbnB1dF9jaGFubmVscyA9IGFsc2EtPmlucHV0X2NoYW5u ZWxzOworCQlpbnB1dF9idWZmZXIgPSBtYWxsb2Moc2l6ZW9mKHNob3J0KSAqIGlucHV0X2NoYW5u ZWxzICoKKwkJCQkgICAgICBpbnB1dF90cmlnZ2VyKTsKKwl9CisKKwlkbyB7CisJCXJlYWNoZWQg PSB0cnVlOworCisJCWlmIChvdXRwdXRfdG90YWwgPCBvdXRwdXRfbGltaXQpIHsKKwkJCXJlYWNo ZWQgPSBmYWxzZTsKKworCQkJaWYgKCFvdXRwdXRfcmVhZHkpIHsKKwkJCQlvdXRwdXRfcmVhZHkg PSB0cnVlOworCisJCQkJZm9yIChpID0gMDsgaSA8IGFsc2EtPm91dHB1dF9oYW5kbGVzX2NvdW50 OyBpKyspCisJCQkJCW91dHB1dF9jb3VudHNbaV0gPSAwOworCisJCQkJcmV0ID0gYWxzYS0+b3V0 cHV0X2NhbGxiYWNrKGFsc2EtPm91dHB1dF9jYWxsYmFja19kYXRhLAorCQkJCQkJCSAgICBvdXRw dXRfYnVmZmVyLAorCQkJCQkJCSAgICBvdXRwdXRfdHJpZ2dlcik7CisJCQkJaWYgKHJldCA8IDAp CisJCQkJCWdvdG8gY29tcGxldGU7CisJCQl9CisKKwkJCWZvciAoaSA9IDA7IGkgPCBhbHNhLT5v dXRwdXRfaGFuZGxlc19jb3VudDsgaSsrKSB7CisJCQkJaGFuZGxlID0gYWxzYS0+b3V0cHV0X2hh bmRsZXNbaV07CisKKwkJCQlyZXQgPSBzbmRfcGNtX2F2YWlsKGhhbmRsZSk7CisJCQkJaWYgKG91 dHB1dF9jb3VudHNbaV0gPCBvdXRwdXRfdHJpZ2dlciAmJgorCQkJCSAgICByZXQgPiAwKSB7CisJ CQkJCWluZGV4ID0gb3V0cHV0X2NvdW50c1tpXSAqCisJCQkJCQlvdXRwdXRfY2hhbm5lbHM7CisJ CQkJCWNvdW50ID0gb3V0cHV0X3RyaWdnZXIgLQorCQkJCQkJb3V0cHV0X2NvdW50c1tpXTsKKwkJ CQkJYXZhaWwgPSBzbmRfcGNtX2F2YWlsKGhhbmRsZSk7CisKKwkJCQkJY291bnQgPSBhdmFpbCA8 IGNvdW50ID8gYXZhaWwgOiBjb3VudDsKKworCQkJCQlyZXQgPSBzbmRfcGNtX3dyaXRlaShoYW5k bGUsCisJCQkJCQkJICAgICAmb3V0cHV0X2J1ZmZlcltpbmRleF0sCisJCQkJCQkJICAgICBjb3Vu dCk7CisJCQkJCWlmIChyZXQgPCAwKSB7CisJCQkJCQlyZXQgPSBzbmRfcGNtX3JlY292ZXIoaGFu ZGxlLAorCQkJCQkJCQkgICAgICByZXQsIDApOworCQkJCQkJaWYgKHJldCA8IDApCisJCQkJCQkJ Z290byBjb21wbGV0ZTsKKwkJCQkJfQorCisJCQkJCW91dHB1dF9jb3VudHNbaV0gKz0gcmV0Owor CQkJCX0gZWxzZSBpZiAob3V0cHV0X2NvdW50c1tpXSA8IG91dHB1dF90cmlnZ2VyICYmCisJCQkJ CSAgIHJldCA8IDApIHsKKwkJCQkJcmV0ID0gc25kX3BjbV9yZWNvdmVyKGhhbmRsZSwgcmV0LCAw KTsKKwkJCQkJaWYgKHJldCA8IDApCisJCQkJCQlnb3RvIGNvbXBsZXRlOworCQkJCX0KKwkJCX0K KworCQkJb3V0cHV0X3JlYWR5ID0gZmFsc2U7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBhbHNhLT5v dXRwdXRfaGFuZGxlc19jb3VudDsgaSsrKQorCQkJCWlmIChvdXRwdXRfY291bnRzW2ldIDwgb3V0 cHV0X3RyaWdnZXIpCisJCQkJCW91dHB1dF9yZWFkeSA9IHRydWU7CisKKwkJCWlmICghb3V0cHV0 X3JlYWR5KQorCQkJCW91dHB1dF90b3RhbCArPSBvdXRwdXRfdHJpZ2dlcjsKKworCQl9CisKKwkJ aWYgKGFsc2EtPmlucHV0X2NhbGxiYWNrICYmIGlucHV0X3RvdGFsIDwgaW5wdXRfbGltaXQpIHsK KwkJCXJlYWNoZWQgPSBmYWxzZTsKKworCQkJaWYgKGlucHV0X2NvdW50ID09IGlucHV0X3RyaWdn ZXIpIHsKKwkJCQlpbnB1dF9jb3VudCA9IDA7CisKKwkJCQlyZXQgPSBhbHNhLT5pbnB1dF9jYWxs YmFjayhhbHNhLT5pbnB1dF9jYWxsYmFja19kYXRhLAorCQkJCQkJCSAgIGlucHV0X2J1ZmZlciwK KwkJCQkJCQkgICBpbnB1dF90cmlnZ2VyKTsKKwkJCQlpZiAocmV0ICE9IDApCisJCQkJCWdvdG8g Y29tcGxldGU7CisJCQl9CisKKwkJCWhhbmRsZSA9IGFsc2EtPmlucHV0X2hhbmRsZTsKKworCQkJ cmV0ID0gc25kX3BjbV9hdmFpbChoYW5kbGUpOworCQkJaWYgKGlucHV0X2NvdW50IDwgaW5wdXRf dHJpZ2dlciAmJgorCQkJICAgIChyZXQgPiAwIHx8IGlucHV0X3RvdGFsID09IDApKSB7CisJCQkJ aW5kZXggPSBpbnB1dF9jb3VudCAqIGlucHV0X2NoYW5uZWxzOworCQkJCWNvdW50ID0gaW5wdXRf dHJpZ2dlciAtIGlucHV0X2NvdW50OworCQkJCWF2YWlsID0gc25kX3BjbV9hdmFpbChoYW5kbGUp OworCisJCQkJY291bnQgPSBhdmFpbCA+IDAgJiYgYXZhaWwgPCBjb3VudCA/IGF2YWlsIDoKKwkJ CQkJY291bnQ7CisKKwkJCQlyZXQgPSBzbmRfcGNtX3JlYWRpKGhhbmRsZSwKKwkJCQkJCSAgICAm aW5wdXRfYnVmZmVyW2luZGV4XSwKKwkJCQkJCSAgICBjb3VudCk7CisJCQkJaWYgKHJldCA9PSAt RUFHQUlOKSB7CisJCQkJCXJldCA9IDA7CisJCQkJfSBlbHNlIGlmIChyZXQgPCAwKSB7CisJCQkJ CXJldCA9IHNuZF9wY21fcmVjb3ZlcihoYW5kbGUsIHJldCwgMCk7CisJCQkJCWlmIChyZXQgPCAw KQorCQkJCQkJZ290byBjb21wbGV0ZTsKKwkJCQl9CisKKwkJCQlpbnB1dF9jb3VudCArPSByZXQ7 CisJCQkJaW5wdXRfdG90YWwgKz0gcmV0OworCQkJfSBlbHNlIGlmIChpbnB1dF9jb3VudCA8IGlu cHV0X3RyaWdnZXIgJiYgcmV0IDwgMCkgeworCQkJCXJldCA9IHNuZF9wY21fcmVjb3ZlcihoYW5k bGUsIHJldCwgMCk7CisJCQkJaWYgKHJldCA8IDApCisJCQkJCWdvdG8gY29tcGxldGU7CisJCQl9 CisJCX0KKwl9IHdoaWxlICghcmVhY2hlZCk7CisKKwlyZXQgPSAwOworCitjb21wbGV0ZToKKwlp ZiAob3V0cHV0X2J1ZmZlcikKKwkJZnJlZShvdXRwdXRfYnVmZmVyKTsKKworCWlmIChpbnB1dF9i dWZmZXIpCisJCWZyZWUoaW5wdXRfYnVmZmVyKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1n aXQgYS9saWIvaWd0X2Fsc2EuaCBiL2xpYi9pZ3RfYWxzYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwLi5mMzk0OWQyNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9pZ3RfYWxz YS5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jw b3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUg YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVy Z2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAq IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFs bCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAq CisgKiBBdXRob3JzOgorICogIFBhdWwgS29jaWFsa293c2tpIDxwYXVsLmtvY2lhbGtvd3NraUBs aW51eC5pbnRlbC5jb20+CisgKi8KKworI2lmbmRlZiBJR1RfQUxTQV9ICisjZGVmaW5lIElHVF9B TFNBX0gKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRp ZgorCisjaW5jbHVkZSAiaWd0LmgiCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorCitzdHJ1Y3QgYWxz YTsKKworc3RydWN0IGFsc2EgKmFsc2FfaW5pdCh2b2lkKTsKK2ludCBhbHNhX29wZW5fb3V0cHV0 KHN0cnVjdCBhbHNhICphbHNhLCBjb25zdCBjaGFyICpkZXZpY2VfbmFtZSk7CitpbnQgYWxzYV9v cGVuX2lucHV0KHN0cnVjdCBhbHNhICphbHNhLCBjb25zdCBjaGFyICpkZXZpY2VfbmFtZSk7Cit2 b2lkIGFsc2FfY2xvc2Vfb3V0cHV0KHN0cnVjdCBhbHNhICphbHNhKTsKK3ZvaWQgYWxzYV9jbG9z ZV9pbnB1dChzdHJ1Y3QgYWxzYSAqYWxzYSk7Citib29sIGFsc2FfdGVzdF9vdXRwdXRfY29uZmln dXJhdGlvbihzdHJ1Y3QgYWxzYSAqYWxzYSwgaW50IGNoYW5uZWxzLAorCQkJCSAgICBpbnQgc2Ft cGxpbmdfcmF0ZSk7Citib29sIGFsc2FfdGVzdF9pbnB1dF9jb25maWd1cmF0aW9uKHN0cnVjdCBh bHNhICphbHNhLCBpbnQgY2hhbm5lbHMsCisJCQkJICAgaW50IHNhbXBsaW5nX3JhdGUpOwordm9p ZCBhbHNhX2NvbmZpZ3VyZV9vdXRwdXQoc3RydWN0IGFsc2EgKmFsc2EsIGludCBjaGFubmVscywK KwkJCSAgIGludCBzYW1wbGluZ19yYXRlKTsKK3ZvaWQgYWxzYV9jb25maWd1cmVfaW5wdXQoc3Ry dWN0IGFsc2EgKmFsc2EsIGludCBjaGFubmVscywKKwkJCSAgaW50IHNhbXBsaW5nX3JhdGUpOwor dm9pZCBhbHNhX3JlZ2lzdGVyX291dHB1dF9jYWxsYmFjayhzdHJ1Y3QgYWxzYSAqYWxzYSwKKwkJ CQkgICBpbnQgKCpjYWxsYmFjaykodm9pZCAqZGF0YSwgc2hvcnQgKmJ1ZmZlciwgaW50IHNhbXBs ZXMpLAorCQkJCSAgIHZvaWQgKmNhbGxiYWNrX2RhdGEsIGludCBzYW1wbGVzX3RyaWdnZXIpOwor dm9pZCBhbHNhX3JlZ2lzdGVyX2lucHV0X2NhbGxiYWNrKHN0cnVjdCBhbHNhICphbHNhLAorCQkJ CSAgaW50ICgqY2FsbGJhY2spKHZvaWQgKmRhdGEsIHNob3J0ICpidWZmZXIsIGludCBzYW1wbGVz KSwKKwkJCQkgIHZvaWQgKmNhbGxiYWNrX2RhdGEsIGludCBzYW1wbGVzX3RyaWdnZXIpOworaW50 IGFsc2FfcnVuKHN0cnVjdCBhbHNhICphbHNhLCBpbnQgZHVyYXRpb25fbXMpOworCisjZW5kaWYK LS0gCjIuMTQuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4 Cg==