From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Tyshchenko Subject: [RFC PATCH 18/31] xen/arm: Add mailbox infrastructure Date: Thu, 9 Nov 2017 19:10:08 +0200 Message-ID: <1510247421-24094-19-git-send-email-olekstysh@gmail.com> References: <1510247421-24094-1-git-send-email-olekstysh@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eCqLv-0004No-24 for xen-devel@lists.xenproject.org; Thu, 09 Nov 2017 17:10:55 +0000 Received: by mail-lf0-f44.google.com with SMTP id e143so8034626lfg.12 for ; Thu, 09 Nov 2017 09:10:53 -0800 (PST) In-Reply-To: <1510247421-24094-1-git-send-email-olekstysh@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Oleksandr Tyshchenko , Stefano Stabellini , Julien Grall List-Id: xen-devel@lists.xenproject.org RnJvbTogT2xla3NhbmRyIFR5c2hjaGVua28gPG9sZWtzYW5kcl90eXNoY2hlbmtvQGVwYW0uY29t PgoKVGhlIG1haWxib3ggZmVhdHVyZSBpcyB1c2VkIGJ5IHRoZSBTQ1BJIHByb3RvY29sIGZvciBp bnRlci1wcm9jZXNzb3IKY29tbXVuaWNhdGlvbiBiZXR3ZWVuIFN5c3RlbSBDb250cm9sIFByb2Nl c3NvcihTQ1ApIGFuZCBBcHBsaWNhdGlvbgpQcm9jZXNzb3IocykgKEFQKS4gRXhpc3RpbmcgU0NQ SSBpbXBsZW1lbnRhdGlvbiB1c2VzIG1haWxib3ggZmVhdHVyZQppbiBjb21tb24gd2l0aCBzaGFy ZWQgbWVtb3J5IHJlZ2lvbi4gQWN0dWFsbHkgdGhlIG1haWxib3ggcHVycG9zZQppcyB0byBzaWdu YWwgYSByZXF1ZXN0IGZvciBzb21lIGFjdGlvbiB0byBiZSB0YWtlbiBieSBTQ1AuCgpUaGlzIGNv ZGUgaXMgY29tcGxldGVseSBib3Jyb3dlZCBmcm9tIHRoZSBMaW51eC4KUGxlYXNlIHNlZToKaHR0 cDovL2VsaXhpci5mcmVlLWVsZWN0cm9ucy5jb20vbGludXgvdjQuMTQtcmM2L3NvdXJjZS9kcml2 ZXJzL21haWxib3gvbWFpbGJveC5jCmh0dHA6Ly9lbGl4aXIuZnJlZS1lbGVjdHJvbnMuY29tL2xp bnV4L3Y0LjE0LXJjNi9zb3VyY2UvZHJpdmVycy9tYWlsYm94L21haWxib3guaApodHRwOi8vZWxp eGlyLmZyZWUtZWxlY3Ryb25zLmNvbS9saW51eC92NC4xNC1yYzYvc291cmNlL2luY2x1ZGUvbGlu dXgvbWFpbGJveF9jbGllbnQuaApodHRwOi8vZWxpeGlyLmZyZWUtZWxlY3Ryb25zLmNvbS9saW51 eC92NC4xNC1yYzYvc291cmNlL2luY2x1ZGUvbGludXgvbWFpbGJveF9jb250cm9sbGVyLmgKCkl0 IGlzIGFuIG9wZW4gcXVlc3Rpb24gd2hlcmUgdGhlIGNvbW1vbiBtYWlsYm94IHN0dWZmIHNob3Vs ZCBiZSBsb2NhdGVkLgoKU2lnbmVkLW9mZi1ieTogT2xla3NhbmRyIFR5c2hjaGVua28gPG9sZWtz YW5kcl90eXNoY2hlbmtvQGVwYW0uY29tPgpDQzogU3RlZmFubyBTdGFiZWxsaW5pIDxzc3RhYmVs bGluaUBrZXJuZWwub3JnPgpDQzogSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3JhbGxAbGluYXJvLm9y Zz4KLS0tCiB4ZW4vYXJjaC9hcm0vY3B1ZnJlcS9tYWlsYm94LmMgICAgICAgICAgICB8IDUxNyAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHhlbi9hcmNoL2FybS9jcHVmcmVxL21haWxi b3guaCAgICAgICAgICAgIHwgIDE0ICsKIHhlbi9hcmNoL2FybS9jcHVmcmVxL21haWxib3hfY2xp ZW50LmggICAgIHwgIDUxICsrKwogeGVuL2FyY2gvYXJtL2NwdWZyZXEvbWFpbGJveF9jb250cm9s bGVyLmggfCAxMzQgKysrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgNzE2IGluc2VydGlvbnMoKykK IGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vYXJjaC9hcm0vY3B1ZnJlcS9tYWlsYm94LmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCB4ZW4vYXJjaC9hcm0vY3B1ZnJlcS9tYWlsYm94LmgKIGNyZWF0ZSBtb2Rl IDEwMDY0NCB4ZW4vYXJjaC9hcm0vY3B1ZnJlcS9tYWlsYm94X2NsaWVudC5oCiBjcmVhdGUgbW9k ZSAxMDA2NDQgeGVuL2FyY2gvYXJtL2NwdWZyZXEvbWFpbGJveF9jb250cm9sbGVyLmgKCmRpZmYg LS1naXQgYS94ZW4vYXJjaC9hcm0vY3B1ZnJlcS9tYWlsYm94LmMgYi94ZW4vYXJjaC9hcm0vY3B1 ZnJlcS9tYWlsYm94LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM3ZjRm NgotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9hcmNoL2FybS9jcHVmcmVxL21haWxib3guYwpAQCAt MCwwICsxLDUxNyBAQAorLyoKKyAqIE1haWxib3g6IENvbW1vbiBjb2RlIGZvciBNYWlsYm94IGNv bnRyb2xsZXJzIGFuZCB1c2VycworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0IExpbmFy byBMdGQuCisgKiBBdXRob3I6IEphc3NpIEJyYXIgPGphc3Npc2luZ2hicmFyQGdtYWlsLmNvbT4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQu aD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+ CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5j bHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8 bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGlu dXgvbWFpbGJveF9jbGllbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWlsYm94X2NvbnRyb2xsZXIu aD4KKworI2luY2x1ZGUgIm1haWxib3guaCIKKworc3RhdGljIExJU1RfSEVBRChtYm94X2NvbnMp Oworc3RhdGljIERFRklORV9NVVRFWChjb25fbXV0ZXgpOworCitzdGF0aWMgaW50IGFkZF90b19y YnVmKHN0cnVjdCBtYm94X2NoYW4gKmNoYW4sIHZvaWQgKm1zc2cpCit7CisJaW50IGlkeDsKKwl1 bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPmxvY2ssIGZs YWdzKTsKKworCS8qIFNlZSBpZiB0aGVyZSBpcyBhbnkgc3BhY2UgbGVmdCAqLworCWlmIChjaGFu LT5tc2dfY291bnQgPT0gTUJPWF9UWF9RVUVVRV9MRU4pIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmY2hhbi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVOT0JVRlM7CisJfQorCisJaWR4 ID0gY2hhbi0+bXNnX2ZyZWU7CisJY2hhbi0+bXNnX2RhdGFbaWR4XSA9IG1zc2c7CisJY2hhbi0+ bXNnX2NvdW50Kys7CisKKwlpZiAoaWR4ID09IE1CT1hfVFhfUVVFVUVfTEVOIC0gMSkKKwkJY2hh bi0+bXNnX2ZyZWUgPSAwOworCWVsc2UKKwkJY2hhbi0+bXNnX2ZyZWUrKzsKKworCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJmNoYW4tPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBpZHg7Cit9CisK K3N0YXRpYyB2b2lkIG1zZ19zdWJtaXQoc3RydWN0IG1ib3hfY2hhbiAqY2hhbikKK3sKKwl1bnNp Z25lZCBjb3VudCwgaWR4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdm9pZCAqZGF0YTsKKwlp bnQgZXJyID0gLUVCVVNZOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPmxvY2ssIGZsYWdz KTsKKworCWlmICghY2hhbi0+bXNnX2NvdW50IHx8IGNoYW4tPmFjdGl2ZV9yZXEpCisJCWdvdG8g ZXhpdDsKKworCWNvdW50ID0gY2hhbi0+bXNnX2NvdW50OworCWlkeCA9IGNoYW4tPm1zZ19mcmVl OworCWlmIChpZHggPj0gY291bnQpCisJCWlkeCAtPSBjb3VudDsKKwllbHNlCisJCWlkeCArPSBN Qk9YX1RYX1FVRVVFX0xFTiAtIGNvdW50OworCisJZGF0YSA9IGNoYW4tPm1zZ19kYXRhW2lkeF07 CisKKwlpZiAoY2hhbi0+Y2wtPnR4X3ByZXBhcmUpCisJCWNoYW4tPmNsLT50eF9wcmVwYXJlKGNo YW4tPmNsLCBkYXRhKTsKKwkvKiBUcnkgdG8gc3VibWl0IGEgbWVzc2FnZSB0byB0aGUgTUJPWCBj b250cm9sbGVyICovCisJZXJyID0gY2hhbi0+bWJveC0+b3BzLT5zZW5kX2RhdGEoY2hhbiwgZGF0 YSk7CisJaWYgKCFlcnIpIHsKKwkJY2hhbi0+YWN0aXZlX3JlcSA9IGRhdGE7CisJCWNoYW4tPm1z Z19jb3VudC0tOworCX0KK2V4aXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbi0+bG9j aywgZmxhZ3MpOworCisJaWYgKCFlcnIgJiYgKGNoYW4tPnR4ZG9uZV9tZXRob2QgJiBUWERPTkVf QllfUE9MTCkpCisJCS8qIGtpY2sgc3RhcnQgdGhlIHRpbWVyIGltbWVkaWF0ZWx5IHRvIGF2b2lk IGRlbGF5cyAqLworCQlocnRpbWVyX3N0YXJ0KCZjaGFuLT5tYm94LT5wb2xsX2hydCwgMCwgSFJU SU1FUl9NT0RFX1JFTCk7Cit9CisKK3N0YXRpYyB2b2lkIHR4X3RpY2soc3RydWN0IG1ib3hfY2hh biAqY2hhbiwgaW50IHIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl2b2lkICptc3NnOwor CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPmxvY2ssIGZsYWdzKTsKKwltc3NnID0gY2hhbi0+ YWN0aXZlX3JlcTsKKwljaGFuLT5hY3RpdmVfcmVxID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZjaGFuLT5sb2NrLCBmbGFncyk7CisKKwkvKiBTdWJtaXQgbmV4dCBtZXNzYWdlICov CisJbXNnX3N1Ym1pdChjaGFuKTsKKworCWlmICghbXNzZykKKwkJcmV0dXJuOworCisJLyogTm90 aWZ5IHRoZSBjbGllbnQgKi8KKwlpZiAoY2hhbi0+Y2wtPnR4X2RvbmUpCisJCWNoYW4tPmNsLT50 eF9kb25lKGNoYW4tPmNsLCBtc3NnLCByKTsKKworCWlmIChyICE9IC1FVElNRSAmJiBjaGFuLT5j bC0+dHhfYmxvY2spCisJCWNvbXBsZXRlKCZjaGFuLT50eF9jb21wbGV0ZSk7Cit9CisKK3N0YXRp YyBlbnVtIGhydGltZXJfcmVzdGFydCB0eGRvbmVfaHJ0aW1lcihzdHJ1Y3QgaHJ0aW1lciAqaHJ0 aW1lcikKK3sKKwlzdHJ1Y3QgbWJveF9jb250cm9sbGVyICptYm94ID0KKwkJY29udGFpbmVyX29m KGhydGltZXIsIHN0cnVjdCBtYm94X2NvbnRyb2xsZXIsIHBvbGxfaHJ0KTsKKwlib29sIHR4ZG9u ZSwgcmVzY2hlZCA9IGZhbHNlOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG1ib3gtPm51 bV9jaGFuczsgaSsrKSB7CisJCXN0cnVjdCBtYm94X2NoYW4gKmNoYW4gPSAmbWJveC0+Y2hhbnNb aV07CisKKwkJaWYgKGNoYW4tPmFjdGl2ZV9yZXEgJiYgY2hhbi0+Y2wpIHsKKwkJCXR4ZG9uZSA9 IGNoYW4tPm1ib3gtPm9wcy0+bGFzdF90eF9kb25lKGNoYW4pOworCQkJaWYgKHR4ZG9uZSkKKwkJ CQl0eF90aWNrKGNoYW4sIDApOworCQkJZWxzZQorCQkJCXJlc2NoZWQgPSB0cnVlOworCQl9CisJ fQorCisJaWYgKHJlc2NoZWQpIHsKKwkJaHJ0aW1lcl9mb3J3YXJkX25vdyhocnRpbWVyLCBtc190 b19rdGltZShtYm94LT50eHBvbGxfcGVyaW9kKSk7CisJCXJldHVybiBIUlRJTUVSX1JFU1RBUlQ7 CisJfQorCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKK30KKworLyoqCisgKiBtYm94X2NoYW5f cmVjZWl2ZWRfZGF0YSAtIEEgd2F5IGZvciBjb250cm9sbGVyIGRyaXZlciB0byBwdXNoIGRhdGEK KyAqCQkJCXJlY2VpdmVkIGZyb20gcmVtb3RlIHRvIHRoZSB1cHBlciBsYXllci4KKyAqIEBjaGFu OiBQb2ludGVyIHRvIHRoZSBtYWlsYm94IGNoYW5uZWwgb24gd2hpY2ggUlggaGFwcGVuZWQuCisg KiBAbXNzZzogQ2xpZW50IHNwZWNpZmljIG1lc3NhZ2UgdHlwZWNhc3RlZCBhcyB2b2lkICoKKyAq CisgKiBBZnRlciBzdGFydHVwIGFuZCBiZWZvcmUgc2h1dGRvd24gYW55IGRhdGEgcmVjZWl2ZWQg b24gdGhlIGNoYW4KKyAqIGlzIHBhc3NlZCBvbiB0byB0aGUgQVBJIHZpYSBhdG9taWMgbWJveF9j aGFuX3JlY2VpdmVkX2RhdGEoKS4KKyAqIFRoZSBjb250cm9sbGVyIHNob3VsZCBBQ0sgdGhlIFJY IG9ubHkgYWZ0ZXIgdGhpcyBjYWxsIHJldHVybnMuCisgKi8KK3ZvaWQgbWJveF9jaGFuX3JlY2Vp dmVkX2RhdGEoc3RydWN0IG1ib3hfY2hhbiAqY2hhbiwgdm9pZCAqbXNzZykKK3sKKwkvKiBObyBi dWZmZXJpbmcgdGhlIHJlY2VpdmVkIGRhdGEgKi8KKwlpZiAoY2hhbi0+Y2wtPnJ4X2NhbGxiYWNr KQorCQljaGFuLT5jbC0+cnhfY2FsbGJhY2soY2hhbi0+Y2wsIG1zc2cpOworfQorRVhQT1JUX1NZ TUJPTF9HUEwobWJveF9jaGFuX3JlY2VpdmVkX2RhdGEpOworCisvKioKKyAqIG1ib3hfY2hhbl90 eGRvbmUgLSBBIHdheSBmb3IgY29udHJvbGxlciBkcml2ZXIgdG8gbm90aWZ5IHRoZQorICoJCQlm cmFtZXdvcmsgdGhhdCB0aGUgbGFzdCBUWCBoYXMgY29tcGxldGVkLgorICogQGNoYW46IFBvaW50 ZXIgdG8gdGhlIG1haWxib3ggY2hhbiBvbiB3aGljaCBUWCBoYXBwZW5lZC4KKyAqIEByOiBTdGF0 dXMgb2YgbGFzdCBUWCAtIE9LIG9yIEVSUk9SCisgKgorICogVGhlIGNvbnRyb2xsZXIgdGhhdCBo YXMgSVJRIGZvciBUWCBBQ0sgY2FsbHMgdGhpcyBhdG9taWMgQVBJCisgKiB0byB0aWNrIHRoZSBU WCBzdGF0ZSBtYWNoaW5lLiBJdCB3b3JrcyBvbmx5IGlmIHR4ZG9uZV9pcnEKKyAqIGlzIHNldCBi eSB0aGUgY29udHJvbGxlci4KKyAqLwordm9pZCBtYm94X2NoYW5fdHhkb25lKHN0cnVjdCBtYm94 X2NoYW4gKmNoYW4sIGludCByKQoreworCWlmICh1bmxpa2VseSghKGNoYW4tPnR4ZG9uZV9tZXRo b2QgJiBUWERPTkVfQllfSVJRKSkpIHsKKwkJZGV2X2VycihjaGFuLT5tYm94LT5kZXYsCisJCSAg ICAgICAiQ29udHJvbGxlciBjYW4ndCBydW4gdGhlIFRYIHRpY2tlclxuIik7CisJCXJldHVybjsK Kwl9CisKKwl0eF90aWNrKGNoYW4sIHIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWJveF9jaGFu X3R4ZG9uZSk7CisKKy8qKgorICogbWJveF9jbGllbnRfdHhkb25lIC0gVGhlIHdheSBmb3IgYSBj bGllbnQgdG8gcnVuIHRoZSBUWCBzdGF0ZSBtYWNoaW5lLgorICogQGNoYW46IE1haWxib3ggY2hh bm5lbCBhc3NpZ25lZCB0byB0aGlzIGNsaWVudC4KKyAqIEByOiBTdWNjZXNzIHN0YXR1cyBvZiBs YXN0IHRyYW5zbWlzc2lvbi4KKyAqCisgKiBUaGUgY2xpZW50L3Byb3RvY29sIGhhZCByZWNlaXZl ZCBzb21lICdBQ0snIHBhY2tldCBhbmQgaXQgbm90aWZpZXMKKyAqIHRoZSBBUEkgdGhhdCB0aGUg bGFzdCBwYWNrZXQgd2FzIHNlbnQgc3VjY2Vzc2Z1bGx5LiBUaGlzIG9ubHkgd29ya3MKKyAqIGlm IHRoZSBjb250cm9sbGVyIGNhbid0IHNlbnNlIFRYLURvbmUuCisgKi8KK3ZvaWQgbWJveF9jbGll bnRfdHhkb25lKHN0cnVjdCBtYm94X2NoYW4gKmNoYW4sIGludCByKQoreworCWlmICh1bmxpa2Vs eSghKGNoYW4tPnR4ZG9uZV9tZXRob2QgJiBUWERPTkVfQllfQUNLKSkpIHsKKwkJZGV2X2Vycihj aGFuLT5tYm94LT5kZXYsICJDbGllbnQgY2FuJ3QgcnVuIHRoZSBUWCB0aWNrZXJcbiIpOworCQly ZXR1cm47CisJfQorCisJdHhfdGljayhjaGFuLCByKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1i b3hfY2xpZW50X3R4ZG9uZSk7CisKKy8qKgorICogbWJveF9jbGllbnRfcGVla19kYXRhIC0gQSB3 YXkgZm9yIGNsaWVudCBkcml2ZXIgdG8gcHVsbCBkYXRhCisgKgkJCXJlY2VpdmVkIGZyb20gcmVt b3RlIGJ5IHRoZSBjb250cm9sbGVyLgorICogQGNoYW46IE1haWxib3ggY2hhbm5lbCBhc3NpZ25l ZCB0byB0aGlzIGNsaWVudC4KKyAqCisgKiBBIHBva2UgdG8gY29udHJvbGxlciBkcml2ZXIgZm9y IGFueSByZWNlaXZlZCBkYXRhLgorICogVGhlIGRhdGEgaXMgYWN0dWFsbHkgcGFzc2VkIG9udG8g Y2xpZW50IHZpYSB0aGUKKyAqIG1ib3hfY2hhbl9yZWNlaXZlZF9kYXRhKCkKKyAqIFRoZSBjYWxs IGNhbiBiZSBtYWRlIGZyb20gYXRvbWljIGNvbnRleHQsIHNvIHRoZSBjb250cm9sbGVyJ3MKKyAq IGltcGxlbWVudGF0aW9uIG9mIHBlZWtfZGF0YSgpIG11c3Qgbm90IHNsZWVwLgorICoKKyAqIFJl dHVybjogVHJ1ZSwgaWYgY29udHJvbGxlciBoYXMsIGFuZCBpcyBnb2luZyB0byBwdXNoIGFmdGVy IHRoaXMsCisgKiAgICAgICAgICBzb21lIGRhdGEuCisgKiAgICAgICAgIEZhbHNlLCBpZiBjb250 cm9sbGVyIGRvZXNuJ3QgaGF2ZSBhbnkgZGF0YSB0byBiZSByZWFkLgorICovCitib29sIG1ib3hf Y2xpZW50X3BlZWtfZGF0YShzdHJ1Y3QgbWJveF9jaGFuICpjaGFuKQoreworCWlmIChjaGFuLT5t Ym94LT5vcHMtPnBlZWtfZGF0YSkKKwkJcmV0dXJuIGNoYW4tPm1ib3gtPm9wcy0+cGVla19kYXRh KGNoYW4pOworCisJcmV0dXJuIGZhbHNlOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWJveF9jbGll bnRfcGVla19kYXRhKTsKKworLyoqCisgKiBtYm94X3NlbmRfbWVzc2FnZSAtCUZvciBjbGllbnQg dG8gc3VibWl0IGEgbWVzc2FnZSB0byBiZQorICoJCQkJc2VudCB0byB0aGUgcmVtb3RlLgorICog QGNoYW46IE1haWxib3ggY2hhbm5lbCBhc3NpZ25lZCB0byB0aGlzIGNsaWVudC4KKyAqIEBtc3Nn OiBDbGllbnQgc3BlY2lmaWMgbWVzc2FnZSB0eXBlY2FzdGVkLgorICoKKyAqIEZvciBjbGllbnQg dG8gc3VibWl0IGRhdGEgdG8gdGhlIGNvbnRyb2xsZXIgZGVzdGluZWQgZm9yIGEgcmVtb3RlCisg KiBwcm9jZXNzb3IuIElmIHRoZSBjbGllbnQgaGFkIHNldCAndHhfYmxvY2snLCB0aGUgY2FsbCB3 aWxsIHJldHVybgorICogZWl0aGVyIHdoZW4gdGhlIHJlbW90ZSByZWNlaXZlcyB0aGUgZGF0YSBv ciB3aGVuICd0eF90b3V0JyBtaWxsaXNlY3MKKyAqIHJ1biBvdXQuCisgKiAgSW4gbm9uLWJsb2Nr aW5nIG1vZGUsIHRoZSByZXF1ZXN0cyBhcmUgYnVmZmVyZWQgYnkgdGhlIEFQSSBhbmQgYQorICog bm9uLW5lZ2F0aXZlIHRva2VuIGlzIHJldHVybmVkIGZvciBlYWNoIHF1ZXVlZCByZXF1ZXN0LiBJ ZiB0aGUgcmVxdWVzdAorICogaXMgbm90IHF1ZXVlZCwgYSBuZWdhdGl2ZSB0b2tlbiBpcyByZXR1 cm5lZC4gVXBvbiBmYWlsdXJlIG9yIHN1Y2Nlc3NmdWwKKyAqIFRYLCB0aGUgQVBJIGNhbGxzICd0 eF9kb25lJyBmcm9tIGF0b21pYyBjb250ZXh0LCBmcm9tIHdoaWNoIHRoZSBjbGllbnQKKyAqIGNv dWxkIHN1Ym1pdCB5ZXQgYW5vdGhlciByZXF1ZXN0LgorICogVGhlIHBvaW50ZXIgdG8gbWVzc2Fn ZSBzaG91bGQgYmUgcHJlc2VydmVkIHVudGlsIGl0IGlzIHNlbnQKKyAqIG92ZXIgdGhlIGNoYW4s IGkuZSwgdHhfZG9uZSgpIGlzIG1hZGUuCisgKiBUaGlzIGZ1bmN0aW9uIGNvdWxkIGJlIGNhbGxl ZCBmcm9tIGF0b21pYyBjb250ZXh0IGFzIGl0IHNpbXBseQorICogcXVldWVzIHRoZSBkYXRhIGFu ZCByZXR1cm5zIGEgdG9rZW4gYWdhaW5zdCB0aGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm46IE5v bi1uZWdhdGl2ZSBpbnRlZ2VyIGZvciBzdWNjZXNzZnVsIHN1Ym1pc3Npb24gKG5vbi1ibG9ja2lu ZyBtb2RlKQorICoJb3IgdHJhbnNtaXNzaW9uIG92ZXIgY2hhbiAoYmxvY2tpbmcgbW9kZSkuCisg KglOZWdhdGl2ZSB2YWx1ZSBkZW5vdGVzIGZhaWx1cmUuCisgKi8KK2ludCBtYm94X3NlbmRfbWVz c2FnZShzdHJ1Y3QgbWJveF9jaGFuICpjaGFuLCB2b2lkICptc3NnKQoreworCWludCB0OworCisJ aWYgKCFjaGFuIHx8ICFjaGFuLT5jbCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl0ID0gYWRkX3Rv X3JidWYoY2hhbiwgbXNzZyk7CisJaWYgKHQgPCAwKSB7CisJCWRldl9lcnIoY2hhbi0+bWJveC0+ ZGV2LCAiVHJ5IGluY3JlYXNpbmcgTUJPWF9UWF9RVUVVRV9MRU5cbiIpOworCQlyZXR1cm4gdDsK Kwl9CisKKwltc2dfc3VibWl0KGNoYW4pOworCisJaWYgKGNoYW4tPmNsLT50eF9ibG9jaykgewor CQl1bnNpZ25lZCBsb25nIHdhaXQ7CisJCWludCByZXQ7CisKKwkJaWYgKCFjaGFuLT5jbC0+dHhf dG91dCkgLyogd2FpdCBmb3JldmVyICovCisJCQl3YWl0ID0gbXNlY3NfdG9famlmZmllcygzNjAw MDAwKTsKKwkJZWxzZQorCQkJd2FpdCA9IG1zZWNzX3RvX2ppZmZpZXMoY2hhbi0+Y2wtPnR4X3Rv dXQpOworCisJCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmY2hhbi0+dHhfY29t cGxldGUsIHdhaXQpOworCQlpZiAocmV0ID09IDApIHsKKwkJCXQgPSAtRVRJTUU7CisJCQl0eF90 aWNrKGNoYW4sIHQpOworCQl9CisJfQorCisJcmV0dXJuIHQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQ TChtYm94X3NlbmRfbWVzc2FnZSk7CisKKy8qKgorICogbWJveF9yZXF1ZXN0X2NoYW5uZWwgLSBS ZXF1ZXN0IGEgbWFpbGJveCBjaGFubmVsLgorICogQGNsOiBJZGVudGl0eSBvZiB0aGUgY2xpZW50 IHJlcXVlc3RpbmcgdGhlIGNoYW5uZWwuCisgKiBAaW5kZXg6IEluZGV4IG9mIG1haWxib3ggc3Bl Y2lmaWVyIGluICdtYm94ZXMnIHByb3BlcnR5LgorICoKKyAqIFRoZSBDbGllbnQgc3BlY2lmaWVz IGl0cyByZXF1aXJlbWVudHMgYW5kIGNhcGFiaWxpdGllcyB3aGlsZSBhc2tpbmcgZm9yCisgKiBh IG1haWxib3ggY2hhbm5lbC4gSXQgY2FuJ3QgYmUgY2FsbGVkIGZyb20gYXRvbWljIGNvbnRleHQu CisgKiBUaGUgY2hhbm5lbCBpcyBleGNsdXNpdmVseSBhbGxvY2F0ZWQgYW5kIGNhbid0IGJlIHVz ZWQgYnkgYW5vdGhlcgorICogY2xpZW50IGJlZm9yZSB0aGUgb3duZXIgY2FsbHMgbWJveF9mcmVl X2NoYW5uZWwuCisgKiBBZnRlciBhc3NpZ25tZW50LCBhbnkgcGFja2V0IHJlY2VpdmVkIG9uIHRo aXMgY2hhbm5lbCB3aWxsIGJlCisgKiBoYW5kZWQgb3ZlciB0byB0aGUgY2xpZW50IHZpYSB0aGUg J3J4X2NhbGxiYWNrJy4KKyAqIFRoZSBmcmFtZXdvcmsgaG9sZHMgcmVmZXJlbmNlIHRvIHRoZSBj bGllbnQsIHNvIHRoZSBtYm94X2NsaWVudAorICogc3RydWN0dXJlIHNob3VsZG4ndCBiZSBtb2Rp ZmllZCB1bnRpbCB0aGUgbWJveF9mcmVlX2NoYW5uZWwgcmV0dXJucy4KKyAqCisgKiBSZXR1cm46 IFBvaW50ZXIgdG8gdGhlIGNoYW5uZWwgYXNzaWduZWQgdG8gdGhlIGNsaWVudCBpZiBzdWNjZXNz ZnVsLgorICoJCUVSUl9QVFIgZm9yIHJlcXVlc3QgZmFpbHVyZS4KKyAqLworc3RydWN0IG1ib3hf Y2hhbiAqbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IGlu ZGV4KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNsLT5kZXY7CisJc3RydWN0IG1ib3hfY29u dHJvbGxlciAqbWJveDsKKwlzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzIHNwZWM7CisJc3RydWN0IG1i b3hfY2hhbiAqY2hhbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlpZiAo IWRldiB8fCAhZGV2LT5vZl9ub2RlKSB7CisJCXByX2RlYnVnKCIlczogTm8gb3duZXIgZGV2aWNl IG5vZGVcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CisJfQorCisJ bXV0ZXhfbG9jaygmY29uX211dGV4KTsKKworCWlmIChvZl9wYXJzZV9waGFuZGxlX3dpdGhfYXJn cyhkZXYtPm9mX25vZGUsICJtYm94ZXMiLAorCQkJCSAgICAgICAiI21ib3gtY2VsbHMiLCBpbmRl eCwgJnNwZWMpKSB7CisJCWRldl9kYmcoZGV2LCAiJXM6IGNhbid0IHBhcnNlIFwibWJveGVzXCIg cHJvcGVydHlcbiIsIF9fZnVuY19fKTsKKwkJbXV0ZXhfdW5sb2NrKCZjb25fbXV0ZXgpOworCQly ZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKwl9CisKKwljaGFuID0gRVJSX1BUUigtRVBST0JFX0RF RkVSKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1ib3gsICZtYm94X2NvbnMsIG5vZGUpCisJCWlm IChtYm94LT5kZXYtPm9mX25vZGUgPT0gc3BlYy5ucCkgeworCQkJY2hhbiA9IG1ib3gtPm9mX3hs YXRlKG1ib3gsICZzcGVjKTsKKwkJCWJyZWFrOworCQl9CisKKwlvZl9ub2RlX3B1dChzcGVjLm5w KTsKKworCWlmIChJU19FUlIoY2hhbikpIHsKKwkJbXV0ZXhfdW5sb2NrKCZjb25fbXV0ZXgpOwor CQlyZXR1cm4gY2hhbjsKKwl9CisKKwlpZiAoY2hhbi0+Y2wgfHwgIXRyeV9tb2R1bGVfZ2V0KG1i b3gtPmRldi0+ZHJpdmVyLT5vd25lcikpIHsKKwkJZGV2X2RiZyhkZXYsICIlczogbWFpbGJveCBu b3QgZnJlZVxuIiwgX19mdW5jX18pOworCQltdXRleF91bmxvY2soJmNvbl9tdXRleCk7CisJCXJl dHVybiBFUlJfUFRSKC1FQlVTWSk7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPmxv Y2ssIGZsYWdzKTsKKwljaGFuLT5tc2dfZnJlZSA9IDA7CisJY2hhbi0+bXNnX2NvdW50ID0gMDsK KwljaGFuLT5hY3RpdmVfcmVxID0gTlVMTDsKKwljaGFuLT5jbCA9IGNsOworCWluaXRfY29tcGxl dGlvbigmY2hhbi0+dHhfY29tcGxldGUpOworCisJaWYgKGNoYW4tPnR4ZG9uZV9tZXRob2QJPT0g VFhET05FX0JZX1BPTEwgJiYgY2wtPmtub3dzX3R4ZG9uZSkKKwkJY2hhbi0+dHhkb25lX21ldGhv ZCB8PSBUWERPTkVfQllfQUNLOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbi0+bG9j aywgZmxhZ3MpOworCisJaWYgKGNoYW4tPm1ib3gtPm9wcy0+c3RhcnR1cCkgeworCQlyZXQgPSBj aGFuLT5tYm94LT5vcHMtPnN0YXJ0dXAoY2hhbik7CisKKwkJaWYgKHJldCkgeworCQkJZGV2X2Vy cihkZXYsICJVbmFibGUgdG8gc3RhcnR1cCB0aGUgY2hhbiAoJWQpXG4iLCByZXQpOworCQkJbWJv eF9mcmVlX2NoYW5uZWwoY2hhbik7CisJCQljaGFuID0gRVJSX1BUUihyZXQpOworCQl9CisJfQor CisJbXV0ZXhfdW5sb2NrKCZjb25fbXV0ZXgpOworCXJldHVybiBjaGFuOworfQorRVhQT1JUX1NZ TUJPTF9HUEwobWJveF9yZXF1ZXN0X2NoYW5uZWwpOworCitzdHJ1Y3QgbWJveF9jaGFuICptYm94 X3JlcXVlc3RfY2hhbm5lbF9ieW5hbWUoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwKKwkJCQkJICAg ICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gY2wtPmRl di0+b2Zfbm9kZTsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJY29uc3QgY2hhciAqbWJveF9u YW1lOworCWludCBpbmRleCA9IDA7CisKKwlpZiAoIW5wKSB7CisJCWRldl9lcnIoY2wtPmRldiwg IiVzKCkgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgRFRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJu IEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJaWYgKCFvZl9nZXRfcHJvcGVydHkobnAsICJtYm94 LW5hbWVzIiwgTlVMTCkpIHsKKwkJZGV2X2VycihjbC0+ZGV2LAorCQkJIiVzKCkgcmVxdWlyZXMg YW4gXCJtYm94LW5hbWVzXCIgcHJvcGVydHlcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIEVSUl9Q VFIoLUVJTlZBTCk7CisJfQorCisJb2ZfcHJvcGVydHlfZm9yX2VhY2hfc3RyaW5nKG5wLCAibWJv eC1uYW1lcyIsIHByb3AsIG1ib3hfbmFtZSkgeworCQlpZiAoIXN0cm5jbXAobmFtZSwgbWJveF9u YW1lLCBzdHJsZW4obmFtZSkpKQorCQkJYnJlYWs7CisJCWluZGV4Kys7CisJfQorCisJcmV0dXJu IG1ib3hfcmVxdWVzdF9jaGFubmVsKGNsLCBpbmRleCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCht Ym94X3JlcXVlc3RfY2hhbm5lbF9ieW5hbWUpOworCisvKioKKyAqIG1ib3hfZnJlZV9jaGFubmVs IC0gVGhlIGNsaWVudCByZWxpbnF1aXNoZXMgY29udHJvbCBvZiBhIG1haWxib3gKKyAqCQkJY2hh bm5lbCBieSB0aGlzIGNhbGwuCisgKiBAY2hhbjogVGhlIG1haWxib3ggY2hhbm5lbCB0byBiZSBm cmVlZC4KKyAqLwordm9pZCBtYm94X2ZyZWVfY2hhbm5lbChzdHJ1Y3QgbWJveF9jaGFuICpjaGFu KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIWNoYW4gfHwgIWNoYW4tPmNsKQor CQlyZXR1cm47CisKKwlpZiAoY2hhbi0+bWJveC0+b3BzLT5zaHV0ZG93bikKKwkJY2hhbi0+bWJv eC0+b3BzLT5zaHV0ZG93bihjaGFuKTsKKworCS8qIFRoZSBxdWV1ZWQgVFggcmVxdWVzdHMgYXJl IHNpbXBseSBhYm9ydGVkLCBubyBjYWxsYmFja3MgYXJlIG1hZGUgKi8KKwlzcGluX2xvY2tfaXJx c2F2ZSgmY2hhbi0+bG9jaywgZmxhZ3MpOworCWNoYW4tPmNsID0gTlVMTDsKKwljaGFuLT5hY3Rp dmVfcmVxID0gTlVMTDsKKwlpZiAoY2hhbi0+dHhkb25lX21ldGhvZCA9PSAoVFhET05FX0JZX1BP TEwgfCBUWERPTkVfQllfQUNLKSkKKwkJY2hhbi0+dHhkb25lX21ldGhvZCA9IFRYRE9ORV9CWV9Q T0xMOworCisJbW9kdWxlX3B1dChjaGFuLT5tYm94LT5kZXYtPmRyaXZlci0+b3duZXIpOworCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4tPmxvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1C T0xfR1BMKG1ib3hfZnJlZV9jaGFubmVsKTsKKworc3RhdGljIHN0cnVjdCBtYm94X2NoYW4gKgor b2ZfbWJveF9pbmRleF94bGF0ZShzdHJ1Y3QgbWJveF9jb250cm9sbGVyICptYm94LAorCQkgICAg Y29uc3Qgc3RydWN0IG9mX3BoYW5kbGVfYXJncyAqc3ApCit7CisJaW50IGluZCA9IHNwLT5hcmdz WzBdOworCisJaWYgKGluZCA+PSBtYm94LT5udW1fY2hhbnMpCisJCXJldHVybiBFUlJfUFRSKC1F SU5WQUwpOworCisJcmV0dXJuICZtYm94LT5jaGFuc1tpbmRdOworfQorCisvKioKKyAqIG1ib3hf Y29udHJvbGxlcl9yZWdpc3RlciAtIFJlZ2lzdGVyIHRoZSBtYWlsYm94IGNvbnRyb2xsZXIKKyAq IEBtYm94OglQb2ludGVyIHRvIHRoZSBtYWlsYm94IGNvbnRyb2xsZXIuCisgKgorICogVGhlIGNv bnRyb2xsZXIgZHJpdmVyIHJlZ2lzdGVycyBpdHMgY29tbXVuaWNhdGlvbiBjaGFubmVscworICov CitpbnQgbWJveF9jb250cm9sbGVyX3JlZ2lzdGVyKHN0cnVjdCBtYm94X2NvbnRyb2xsZXIgKm1i b3gpCit7CisJaW50IGksIHR4ZG9uZTsKKworCS8qIFNhbml0eSBjaGVjayAqLworCWlmICghbWJv eCB8fCAhbWJveC0+ZGV2IHx8ICFtYm94LT5vcHMgfHwgIW1ib3gtPm51bV9jaGFucykKKwkJcmV0 dXJuIC1FSU5WQUw7CisKKwlpZiAobWJveC0+dHhkb25lX2lycSkKKwkJdHhkb25lID0gVFhET05F X0JZX0lSUTsKKwllbHNlIGlmIChtYm94LT50eGRvbmVfcG9sbCkKKwkJdHhkb25lID0gVFhET05F X0JZX1BPTEw7CisJZWxzZSAvKiBJdCBoYXMgdG8gYmUgQUNLIHRoZW4gKi8KKwkJdHhkb25lID0g VFhET05FX0JZX0FDSzsKKworCWlmICh0eGRvbmUgPT0gVFhET05FX0JZX1BPTEwpIHsKKworCQlp ZiAoIW1ib3gtPm9wcy0+bGFzdF90eF9kb25lKSB7CisJCQlkZXZfZXJyKG1ib3gtPmRldiwgImxh c3RfdHhfZG9uZSBtZXRob2QgaXMgYWJzZW50XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9 CisKKwkJaHJ0aW1lcl9pbml0KCZtYm94LT5wb2xsX2hydCwgQ0xPQ0tfTU9OT1RPTklDLAorCQkJ ICAgICBIUlRJTUVSX01PREVfUkVMKTsKKwkJbWJveC0+cG9sbF9ocnQuZnVuY3Rpb24gPSB0eGRv bmVfaHJ0aW1lcjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbWJveC0+bnVtX2NoYW5zOyBpKysp IHsKKwkJc3RydWN0IG1ib3hfY2hhbiAqY2hhbiA9ICZtYm94LT5jaGFuc1tpXTsKKworCQljaGFu LT5jbCA9IE5VTEw7CisJCWNoYW4tPm1ib3ggPSBtYm94OworCQljaGFuLT50eGRvbmVfbWV0aG9k ID0gdHhkb25lOworCQlzcGluX2xvY2tfaW5pdCgmY2hhbi0+bG9jayk7CisJfQorCisJaWYgKCFt Ym94LT5vZl94bGF0ZSkKKwkJbWJveC0+b2ZfeGxhdGUgPSBvZl9tYm94X2luZGV4X3hsYXRlOwor CisJbXV0ZXhfbG9jaygmY29uX211dGV4KTsKKwlsaXN0X2FkZF90YWlsKCZtYm94LT5ub2RlLCAm bWJveF9jb25zKTsKKwltdXRleF91bmxvY2soJmNvbl9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30K K0VYUE9SVF9TWU1CT0xfR1BMKG1ib3hfY29udHJvbGxlcl9yZWdpc3Rlcik7CisKKy8qKgorICog bWJveF9jb250cm9sbGVyX3VucmVnaXN0ZXIgLSBVbnJlZ2lzdGVyIHRoZSBtYWlsYm94IGNvbnRy b2xsZXIKKyAqIEBtYm94OglQb2ludGVyIHRvIHRoZSBtYWlsYm94IGNvbnRyb2xsZXIuCisgKi8K K3ZvaWQgbWJveF9jb250cm9sbGVyX3VucmVnaXN0ZXIoc3RydWN0IG1ib3hfY29udHJvbGxlciAq bWJveCkKK3sKKwlpbnQgaTsKKworCWlmICghbWJveCkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9j aygmY29uX211dGV4KTsKKworCWxpc3RfZGVsKCZtYm94LT5ub2RlKTsKKworCWZvciAoaSA9IDA7 IGkgPCBtYm94LT5udW1fY2hhbnM7IGkrKykKKwkJbWJveF9mcmVlX2NoYW5uZWwoJm1ib3gtPmNo YW5zW2ldKTsKKworCWlmIChtYm94LT50eGRvbmVfcG9sbCkKKwkJaHJ0aW1lcl9jYW5jZWwoJm1i b3gtPnBvbGxfaHJ0KTsKKworCW11dGV4X3VubG9jaygmY29uX211dGV4KTsKK30KK0VYUE9SVF9T WU1CT0xfR1BMKG1ib3hfY29udHJvbGxlcl91bnJlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL3hlbi9h cmNoL2FybS9jcHVmcmVxL21haWxib3guaCBiL3hlbi9hcmNoL2FybS9jcHVmcmVxL21haWxib3gu aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTZiYTY4Ci0tLSAvZGV2L251 bGwKKysrIGIveGVuL2FyY2gvYXJtL2NwdWZyZXEvbWFpbGJveC5oCkBAIC0wLDAgKzEsMTQgQEAK Ky8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19NQUlMQk9YX0gKKyNkZWZp bmUgX19NQUlMQk9YX0gKKworI2RlZmluZSBUWERPTkVfQllfSVJRCUJJVCgwKSAvKiBjb250cm9s bGVyIGhhcyByZW1vdGUgUlRSIGlycSAqLworI2RlZmluZSBUWERPTkVfQllfUE9MTAlCSVQoMSkg LyogY29udHJvbGxlciBjYW4gcmVhZCBzdGF0dXMgb2YgbGFzdCBUWCAqLworI2RlZmluZSBUWERP TkVfQllfQUNLCUJJVCgyKSAvKiBTL1cgQUNLIHJlY2V2aWVkIGJ5IENsaWVudCB0aWNrcyB0aGUg VFggKi8KKworI2VuZGlmIC8qIF9fTUFJTEJPWF9IICovCmRpZmYgLS1naXQgYS94ZW4vYXJjaC9h cm0vY3B1ZnJlcS9tYWlsYm94X2NsaWVudC5oIGIveGVuL2FyY2gvYXJtL2NwdWZyZXEvbWFpbGJv eF9jbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDM0ODcxCi0t LSAvZGV2L251bGwKKysrIGIveGVuL2FyY2gvYXJtL2NwdWZyZXEvbWFpbGJveF9jbGllbnQuaApA QCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgTGluYXJvIEx0 ZC4KKyAqIEF1dGhvcjogSmFzc2kgQnJhciA8amFzc2lzaW5naGJyYXJAZ21haWwuY29tPgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX01BSUxCT1hfQ0xJRU5UX0gKKyNk ZWZpbmUgX19NQUlMQk9YX0NMSUVOVF9ICisKKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1 ZGUgPGxpbnV4L2RldmljZS5oPgorCitzdHJ1Y3QgbWJveF9jaGFuOworCisvKioKKyAqIHN0cnVj dCBtYm94X2NsaWVudCAtIFVzZXIgb2YgYSBtYWlsYm94CisgKiBAZGV2OgkJVGhlIGNsaWVudCBk ZXZpY2UKKyAqIEB0eF9ibG9jazoJCUlmIHRoZSBtYm94X3NlbmRfbWVzc2FnZSBzaG91bGQgYmxv Y2sgdW50aWwgZGF0YSBpcworICoJCQl0cmFuc21pdHRlZC4KKyAqIEB0eF90b3V0OgkJTWF4IGJs b2NrIHBlcmlvZCBpbiBtcyBiZWZvcmUgVFggaXMgYXNzdW1lZCBmYWlsdXJlCisgKiBAa25vd3Nf dHhkb25lOglJZiB0aGUgY2xpZW50IGNvdWxkIHJ1biB0aGUgVFggc3RhdGUgbWFjaGluZS4gVXN1 YWxseQorICoJCQlpZiB0aGUgY2xpZW50IHJlY2VpdmVzIHNvbWUgQUNLIHBhY2tldCBmb3IgdHJh bnNtaXNzaW9uLgorICoJCQlVbnVzZWQgaWYgdGhlIGNvbnRyb2xsZXIgYWxyZWFkeSBoYXMgVFhf RG9uZS9SVFIgSVJRLgorICogQHJ4X2NhbGxiYWNrOglBdG9taWMgY2FsbGJhY2sgdG8gcHJvdmlk ZSBjbGllbnQgdGhlIGRhdGEgcmVjZWl2ZWQKKyAqIEB0eF9wcmVwYXJlOiAJQXRvbWljIGNhbGxi YWNrIHRvIGFzayBjbGllbnQgdG8gcHJlcGFyZSB0aGUgcGF5bG9hZAorICoJCQliZWZvcmUgaW5p dGlhdGluZyB0aGUgdHJhbnNtaXNzaW9uIGlmIHJlcXVpcmVkLgorICogQHR4X2RvbmU6CQlBdG9t aWMgY2FsbGJhY2sgdG8gdGVsbCBjbGllbnQgb2YgZGF0YSB0cmFuc21pc3Npb24KKyAqLworc3Ry dWN0IG1ib3hfY2xpZW50IHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJYm9vbCB0eF9ibG9jazsK Kwl1bnNpZ25lZCBsb25nIHR4X3RvdXQ7CisJYm9vbCBrbm93c190eGRvbmU7CisKKwl2b2lkICgq cnhfY2FsbGJhY2spKHN0cnVjdCBtYm94X2NsaWVudCAqY2wsIHZvaWQgKm1zc2cpOworCXZvaWQg KCp0eF9wcmVwYXJlKShzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCB2b2lkICptc3NnKTsKKwl2b2lk ICgqdHhfZG9uZSkoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgdm9pZCAqbXNzZywgaW50IHIpOwor fTsKKworc3RydWN0IG1ib3hfY2hhbiAqbWJveF9yZXF1ZXN0X2NoYW5uZWxfYnluYW1lKHN0cnVj dCBtYm94X2NsaWVudCAqY2wsCisJCQkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUpOworc3RydWN0 IG1ib3hfY2hhbiAqbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwg aW50IGluZGV4KTsKK2ludCBtYm94X3NlbmRfbWVzc2FnZShzdHJ1Y3QgbWJveF9jaGFuICpjaGFu LCB2b2lkICptc3NnKTsKK3ZvaWQgbWJveF9jbGllbnRfdHhkb25lKHN0cnVjdCBtYm94X2NoYW4g KmNoYW4sIGludCByKTsgLyogYXRvbWljICovCitib29sIG1ib3hfY2xpZW50X3BlZWtfZGF0YShz dHJ1Y3QgbWJveF9jaGFuICpjaGFuKTsgLyogYXRvbWljICovCit2b2lkIG1ib3hfZnJlZV9jaGFu bmVsKHN0cnVjdCBtYm94X2NoYW4gKmNoYW4pOyAvKiBtYXkgc2xlZXAgKi8KKworI2VuZGlmIC8q IF9fTUFJTEJPWF9DTElFTlRfSCAqLwpkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL2NwdWZyZXEv bWFpbGJveF9jb250cm9sbGVyLmggYi94ZW4vYXJjaC9hcm0vY3B1ZnJlcS9tYWlsYm94X2NvbnRy b2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGRlYWRiCi0tLSAv ZGV2L251bGwKKysrIGIveGVuL2FyY2gvYXJtL2NwdWZyZXEvbWFpbGJveF9jb250cm9sbGVyLmgK QEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYg X19NQUlMQk9YX0NPTlRST0xMRVJfSAorI2RlZmluZSBfX01BSUxCT1hfQ09OVFJPTExFUl9ICisK KyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVk ZSA8bGludXgvaHJ0aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUg PGxpbnV4L2NvbXBsZXRpb24uaD4KKworc3RydWN0IG1ib3hfY2hhbjsKKworLyoqCisgKiBzdHJ1 Y3QgbWJveF9jaGFuX29wcyAtIG1ldGhvZHMgdG8gY29udHJvbCBtYWlsYm94IGNoYW5uZWxzCisg KiBAc2VuZF9kYXRhOglUaGUgQVBJIGFza3MgdGhlIE1CT1ggY29udHJvbGxlciBkcml2ZXIsIGlu IGF0b21pYworICoJCWNvbnRleHQgdHJ5IHRvIHRyYW5zbWl0IGEgbWVzc2FnZSBvbiB0aGUgYnVz LiBSZXR1cm5zIDAgaWYKKyAqCQlkYXRhIGlzIGFjY2VwdGVkIGZvciB0cmFuc21pc3Npb24sIC1F QlVTWSB3aGlsZSByZWplY3RpbmcKKyAqCQlpZiB0aGUgcmVtb3RlIGhhc24ndCB5ZXQgcmVhZCB0 aGUgbGFzdCBkYXRhIHNlbnQuIEFjdHVhbAorICoJCXRyYW5zbWlzc2lvbiBvZiBkYXRhIGlzIHJl cG9ydGVkIGJ5IHRoZSBjb250cm9sbGVyIHZpYQorICoJCW1ib3hfY2hhbl90eGRvbmUgKGlmIGl0 IGhhcyBzb21lIFRYIEFDSyBpcnEpLiBJdCBtdXN0IG5vdAorICoJCXNsZWVwLgorICogQHN0YXJ0 dXA6CUNhbGxlZCB3aGVuIGEgY2xpZW50IHJlcXVlc3RzIHRoZSBjaGFuLiBUaGUgY29udHJvbGxl cgorICoJCWNvdWxkIGFzayBjbGllbnRzIGZvciBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgb2YgY29t bXVuaWNhdGlvbgorICoJCXRvIGJlIHByb3ZpZGVkIHZpYSBjbGllbnQncyBjaGFuX2RhdGEuIFRo aXMgY2FsbCBtYXkKKyAqCQlibG9jay4gQWZ0ZXIgdGhpcyBjYWxsIHRoZSBDb250cm9sbGVyIG11 c3QgZm9yd2FyZCBhbnkKKyAqCQlkYXRhIHJlY2VpdmVkIG9uIHRoZSBjaGFuIGJ5IGNhbGxpbmcg bWJveF9jaGFuX3JlY2VpdmVkX2RhdGEuCisgKgkJVGhlIGNvbnRyb2xsZXIgbWF5IGRvIHN0dWZm IHRoYXQgbmVlZCB0byBzbGVlcC4KKyAqIEBzaHV0ZG93bjoJQ2FsbGVkIHdoZW4gYSBjbGllbnQg cmVsaW5xdWlzaGVzIGNvbnRyb2wgb2YgYSBjaGFuLgorICoJCVRoaXMgY2FsbCBtYXkgYmxvY2sg dG9vLiBUaGUgY29udHJvbGxlciBtdXN0IG5vdCBmb3J3YXJkCisgKgkJYW55IHJlY2VpdmVkIGRh dGEgYW55bW9yZS4KKyAqCQlUaGUgY29udHJvbGxlciBtYXkgZG8gc3R1ZmYgdGhhdCBuZWVkIHRv IHNsZWVwLgorICogQGxhc3RfdHhfZG9uZTogSWYgdGhlIGNvbnRyb2xsZXIgc2V0cyAndHhkb25l X3BvbGwnLCB0aGUgQVBJIGNhbGxzCisgKgkJICB0aGlzIHRvIHBvbGwgc3RhdHVzIG9mIGxhc3Qg VFguIFRoZSBjb250cm9sbGVyIG11c3QKKyAqCQkgIGdpdmUgcHJpb3JpdHkgdG8gSVJRIG1ldGhv ZCBvdmVyIHBvbGxpbmcgYW5kIG5ldmVyCisgKgkJICBzZXQgYm90aCB0eGRvbmVfcG9sbCBhbmQg dHhkb25lX2lycS4gT25seSBpbiBwb2xsaW5nCisgKgkJICBtb2RlICdzZW5kX2RhdGEnIGlzIGV4 cGVjdGVkIHRvIHJldHVybiAtRUJVU1kuCisgKgkJICBUaGUgY29udHJvbGxlciBtYXkgZG8gc3R1 ZmYgdGhhdCBuZWVkIHRvIHNsZWVwL2Jsb2NrLgorICoJCSAgVXNlZCBvbmx5IGlmIHR4ZG9uZV9w b2xsOj10cnVlICYmIHR4ZG9uZV9pcnE6PWZhbHNlCisgKiBAcGVla19kYXRhOiBBdG9taWMgY2hl Y2sgZm9yIGFueSByZWNlaXZlZCBkYXRhLiBSZXR1cm4gdHJ1ZSBpZiBjb250cm9sbGVyCisgKgkJ ICBoYXMgc29tZSBkYXRhIHRvIHB1c2ggdG8gdGhlIGNsaWVudC4gRmFsc2Ugb3RoZXJ3aXNlLgor ICovCitzdHJ1Y3QgbWJveF9jaGFuX29wcyB7CisJaW50ICgqc2VuZF9kYXRhKShzdHJ1Y3QgbWJv eF9jaGFuICpjaGFuLCB2b2lkICpkYXRhKTsKKwlpbnQgKCpzdGFydHVwKShzdHJ1Y3QgbWJveF9j aGFuICpjaGFuKTsKKwl2b2lkICgqc2h1dGRvd24pKHN0cnVjdCBtYm94X2NoYW4gKmNoYW4pOwor CWJvb2wgKCpsYXN0X3R4X2RvbmUpKHN0cnVjdCBtYm94X2NoYW4gKmNoYW4pOworCWJvb2wgKCpw ZWVrX2RhdGEpKHN0cnVjdCBtYm94X2NoYW4gKmNoYW4pOworfTsKKworLyoqCisgKiBzdHJ1Y3Qg bWJveF9jb250cm9sbGVyIC0gQ29udHJvbGxlciBvZiBhIGNsYXNzIG9mIGNvbW11bmljYXRpb24g Y2hhbm5lbHMKKyAqIEBkZXY6CQlEZXZpY2UgYmFja2luZyB0aGlzIGNvbnRyb2xsZXIKKyAqIEBv cHM6CQlPcGVyYXRvcnMgdGhhdCB3b3JrIG9uIGVhY2ggY29tbXVuaWNhdGlvbiBjaGFuCisgKiBA Y2hhbnM6CQlBcnJheSBvZiBjaGFubmVscworICogQG51bV9jaGFuczoJCU51bWJlciBvZiBjaGFu bmVscyBpbiB0aGUgJ2NoYW5zJyBhcnJheS4KKyAqIEB0eGRvbmVfaXJxOgkJSW5kaWNhdGVzIGlm IHRoZSBjb250cm9sbGVyIGNhbiByZXBvcnQgdG8gQVBJIHdoZW4KKyAqCQkJdGhlIGxhc3QgdHJh bnNtaXR0ZWQgZGF0YSB3YXMgcmVhZCBieSB0aGUgcmVtb3RlLgorICoJCQlFZywgaWYgaXQgaGFz IHNvbWUgVFggQUNLIGlycS4KKyAqIEB0eGRvbmVfcG9sbDoJSWYgdGhlIGNvbnRyb2xsZXIgY2Fu IHJlYWQgYnV0IG5vdCByZXBvcnQgdGhlIFRYCisgKgkJCWRvbmUuIEV4LCBzb21lIHJlZ2lzdGVy IHNob3dzIHRoZSBUWCBzdGF0dXMgYnV0CisgKgkJCW5vIGludGVycnVwdCByaXNlcy4gSWdub3Jl ZCBpZiAndHhkb25lX2lycScgaXMgc2V0LgorICogQHR4cG9sbF9wZXJpb2Q6CUlmICd0eGRvbmVf cG9sbCcgaXMgaW4gZWZmZWN0LCB0aGUgQVBJIHBvbGxzIGZvcgorICoJCQlsYXN0IFRYJ3Mgc3Rh dHVzIGFmdGVyIHRoZXNlIG1hbnkgbWlsbGlzZWNzCisgKiBAb2ZfeGxhdGU6CQlDb250cm9sbGVy IGRyaXZlciBzcGVjaWZpYyBtYXBwaW5nIG9mIGNoYW5uZWwgdmlhIERUCisgKiBAcG9sbF9ocnQ6 CQlBUEkgcHJpdmF0ZS4gaHJ0aW1lciB1c2VkIHRvIHBvbGwgZm9yIFRYRE9ORSBvbiBhbGwKKyAq CQkJY2hhbm5lbHMuCisgKiBAbm9kZToJCUFQSSBwcml2YXRlLiBUbyBob29rIGludG8gbGlzdCBv ZiBjb250cm9sbGVycy4KKyAqLworc3RydWN0IG1ib3hfY29udHJvbGxlciB7CisJc3RydWN0IGRl dmljZSAqZGV2OworCWNvbnN0IHN0cnVjdCBtYm94X2NoYW5fb3BzICpvcHM7CisJc3RydWN0IG1i b3hfY2hhbiAqY2hhbnM7CisJaW50IG51bV9jaGFuczsKKwlib29sIHR4ZG9uZV9pcnE7CisJYm9v bCB0eGRvbmVfcG9sbDsKKwl1bnNpZ25lZCB0eHBvbGxfcGVyaW9kOworCXN0cnVjdCBtYm94X2No YW4gKigqb2ZfeGxhdGUpKHN0cnVjdCBtYm94X2NvbnRyb2xsZXIgKm1ib3gsCisJCQkJICAgICAg Y29uc3Qgc3RydWN0IG9mX3BoYW5kbGVfYXJncyAqc3ApOworCS8qIEludGVybmFsIHRvIEFQSSAq LworCXN0cnVjdCBocnRpbWVyIHBvbGxfaHJ0OworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKK307 CisKKy8qCisgKiBUaGUgbGVuZ3RoIG9mIGNpcmN1bGFyIGJ1ZmZlciBmb3IgcXVldWluZyBtZXNz YWdlcyBmcm9tIGEgY2xpZW50LgorICogJ21zZ19jb3VudCcgdHJhY2tzIHRoZSBudW1iZXIgb2Yg YnVmZmVyZWQgbWVzc2FnZXMgd2hpbGUgJ21zZ19mcmVlJworICogaXMgdGhlIGluZGV4IHdoZXJl IHRoZSBuZXh0IG1lc3NhZ2Ugd291bGQgYmUgYnVmZmVyZWQuCisgKiBXZSBzaG91bGRuJ3QgbmVl ZCBpdCB0b28gYmlnIGJlY2F1c2UgZXZlcnkgdHJhbnNmZXIgaXMgaW50ZXJydXB0CisgKiB0cmln Z2VyZWQgYW5kIGlmIHdlIGhhdmUgbG90cyBvZiBkYXRhIHRvIHRyYW5zZmVyLCB0aGUgaW50ZXJy dXB0CisgKiBsYXRlbmNpZXMgYXJlIGdvaW5nIHRvIGJlIHRoZSBib3R0bGVuZWNrLCBub3QgdGhl IGJ1ZmZlciBsZW5ndGguCisgKiBCZXNpZGVzLCBtYm94X3NlbmRfbWVzc2FnZSBjb3VsZCBiZSBj YWxsZWQgZnJvbSBhdG9taWMgY29udGV4dCBhbmQKKyAqIHRoZSBjbGllbnQgY291bGQgYWxzbyBx dWV1ZSBhbm90aGVyIG1lc3NhZ2UgZnJvbSB0aGUgbm90aWZpZXIgJ3R4X2RvbmUnCisgKiBvZiB0 aGUgbGFzdCB0cmFuc2ZlciBkb25lLgorICogUkVWSVNJVDogSWYgdG9vIG1hbnkgcGxhdGZvcm1z IHNlZSB0aGUgIlRyeSBpbmNyZWFzaW5nIE1CT1hfVFhfUVVFVUVfTEVOIgorICogcHJpbnQsIGl0 IG5lZWRzIHRvIGJlIHRha2VuIGZyb20gY29uZmlnIG9wdGlvbiBvciBzb21lc3VjaC4KKyAqLwor I2RlZmluZSBNQk9YX1RYX1FVRVVFX0xFTgkyMAorCisvKioKKyAqIHN0cnVjdCBtYm94X2NoYW4g LSBzL3cgcmVwcmVzZW50YXRpb24gb2YgYSBjb21tdW5pY2F0aW9uIGNoYW4KKyAqIEBtYm94OgkJ UG9pbnRlciB0byB0aGUgcGFyZW50L3Byb3ZpZGVyIG9mIHRoaXMgY2hhbm5lbAorICogQHR4ZG9u ZV9tZXRob2Q6CVdheSB0byBkZXRlY3QgVFhEb25lIGNob3NlbiBieSB0aGUgQVBJCisgKiBAY2w6 CQkJUG9pbnRlciB0byB0aGUgY3VycmVudCBvd25lciBvZiB0aGlzIGNoYW5uZWwKKyAqIEB0eF9j b21wbGV0ZToJVHJhbnNtaXNzaW9uIGNvbXBsZXRpb24KKyAqIEBhY3RpdmVfcmVxOgkJQ3VycmVu dGx5IGFjdGl2ZSByZXF1ZXN0IGhvb2sKKyAqIEBtc2dfY291bnQ6CQlOby4gb2YgbXNzZyBjdXJy ZW50bHkgcXVldWVkCisgKiBAbXNnX2ZyZWU6CQlJbmRleCBvZiBuZXh0IGF2YWlsYWJsZSBtc3Nn IHNsb3QKKyAqIEBtc2dfZGF0YToJCUhvb2sgZm9yIGRhdGEgcGFja2V0CisgKiBAbG9jazoJCVNl cmlhbGlzZSBhY2Nlc3MgdG8gdGhlIGNoYW5uZWwKKyAqIEBjb25fcHJpdjoJCUhvb2sgZm9yIGNv bnRyb2xsZXIgZHJpdmVyIHRvIGF0dGFjaCBwcml2YXRlIGRhdGEKKyAqLworc3RydWN0IG1ib3hf Y2hhbiB7CisJc3RydWN0IG1ib3hfY29udHJvbGxlciAqbWJveDsKKwl1bnNpZ25lZCB0eGRvbmVf bWV0aG9kOworCXN0cnVjdCBtYm94X2NsaWVudCAqY2w7CisJc3RydWN0IGNvbXBsZXRpb24gdHhf Y29tcGxldGU7CisJdm9pZCAqYWN0aXZlX3JlcTsKKwl1bnNpZ25lZCBtc2dfY291bnQsIG1zZ19m cmVlOworCXZvaWQgKm1zZ19kYXRhW01CT1hfVFhfUVVFVUVfTEVOXTsKKwlzcGlubG9ja190IGxv Y2s7IC8qIFNlcmlhbGlzZSBhY2Nlc3MgdG8gdGhlIGNoYW5uZWwgKi8KKwl2b2lkICpjb25fcHJp djsKK307CisKK2ludCBtYm94X2NvbnRyb2xsZXJfcmVnaXN0ZXIoc3RydWN0IG1ib3hfY29udHJv bGxlciAqbWJveCk7IC8qIGNhbiBzbGVlcCAqLwordm9pZCBtYm94X2NvbnRyb2xsZXJfdW5yZWdp c3RlcihzdHJ1Y3QgbWJveF9jb250cm9sbGVyICptYm94KTsgLyogY2FuIHNsZWVwICovCit2b2lk IG1ib3hfY2hhbl9yZWNlaXZlZF9kYXRhKHN0cnVjdCBtYm94X2NoYW4gKmNoYW4sIHZvaWQgKmRh dGEpOyAvKiBhdG9taWMgKi8KK3ZvaWQgbWJveF9jaGFuX3R4ZG9uZShzdHJ1Y3QgbWJveF9jaGFu ICpjaGFuLCBpbnQgcik7IC8qIGF0b21pYyAqLworCisjZW5kaWYgLyogX19NQUlMQk9YX0NPTlRS T0xMRVJfSCAqLwotLSAKMi43LjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4u b3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK