From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sam Ravnborg Subject: [RFC PATCH] drm: add Atmel LCDC display controller support Date: Fri, 26 Jul 2019 22:44:13 +0200 Message-ID: <20190726204413.GA32705@ravnborg.org> References: <20190726203626.GA31474@ravnborg.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from asavdk4.altibox.net (asavdk4.altibox.net [109.247.116.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id 28D0A6EE5A for ; Fri, 26 Jul 2019 20:44:16 +0000 (UTC) Received: from ravnborg.org (unknown [158.248.194.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by asavdk4.altibox.net (Postfix) with ESMTPS id 69D208031E for ; Fri, 26 Jul 2019 22:44:14 +0200 (CEST) Content-Disposition: inline In-Reply-To: <20190726203626.GA31474@ravnborg.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org VGhpcyBpcyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZHJpdmVyIGZvciB0aGUgYXQ5MXNhbSog TENEQyBJUC4KTm90aWNlIHRoYXQgaXQgbmVlZHMgc29tZSBvdGhlciBjb21wYW5pb24gZHJpdmVy cyBhbmQgSSBwb3N0ZWQgdGhpcwpjb2RlLWRyb3Agb25seSB0byBzdXBwb3J0IHRoZSByZXF1ZXN0 IGZvciBoZWxwIG9uIHRoZSBCR1IgdmVyc3VzIFJHQgppc3N1ZS4KVGhhdCBzYWlkIC0gYW55IHJl dmlldyBmZWVkYmFjayB3aWxsIGJlIGFwcHJlY2lhdGVkIQoKCVNhbQoKRnJvbSBjNGMyMjc0MzEz ZGJiMjNmMzg2MjY5MjA4MzQ4MTk3MzVmNzBkODk5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpG cm9tOiBTYW0gUmF2bmJvcmcgPHNhbUByYXZuYm9yZy5vcmc+CkRhdGU6IFRodSwgMjcgRGVjIDIw MTggMDI6MjM6MzEgKzAxMDAKU3ViamVjdDogW1BBVENIIDIyLzIyXSBkcm06IGFkZCBBdG1lbCBM Q0RDIGRpc3BsYXkgY29udHJvbGxlciBzdXBwb3J0CgpUaGlzIGlzIGEgRFJNIGJhc2VkIGRyaXZl ciBmb3IgdGhlIEF0bWVsIExDREMgSVAuClRoZXJlIGV4aXN0IHRvZGF5IGEgZnJhbWVidWZmZXIg YmFzZWQgZHJpdmVyIGFuZAp0aGlzIGlzIGEgcmUtaW1wbG1lbnRhdGlvbiBvZiB0aGUgc2FtZSBv biB0b3Agb2YgRFJNLgoKVGhlIHJld3JpdGUgd2FzIGJhc2VkIG9uIHRoZSBvcmlnaW5hbCBmYmRl diBkcml2ZXIKYnV0IHRoZSBkcml2ZXIgaGFzIGFsc28gc2VlbiBpbnNwaXJhdGlvbiBmcm9tCnRo ZSBhdG1lbC1obGNkY19kYyBkcml2ZXIgYW5kIG90aGVycy4KClRoZSBkcml2ZXIgaXMgbm90IGEg ZnVsbCByZXBsYWNlbWVudDoKLSBTVE4gZGlzcGxheXMgYXJlIG5vdCBzdXBwb3J0ZWQKICAgICAg ICBTVE4gZGlzcGxheXMgYXJlIG5vdCBjb25zaWRlcmVkIHJlbGV2YW50IGZvcgogICAgICAgIGN1 cnJlbnQga2VybmVscywgYW5kIHRoZXJlIGlzIG5vIHBsYW4gdG8gYWRkIFNUTiBzdXBwb3J0CgpU aGUgYXRtZWwtbGNkYyBkcml2ZXIgaXMgZGl2aWRlZCBpbnRvIGEgZmV3IGZpbGVzOgphdG1lbF9s Y2RjLmggICAgICAgICAgICAtIGRlZmluaXRpb25zIHNoYXJlZCBieSB0aGUgZHJpdmVyIGltcGxt ZW50YXRpb24KLi4vbGludXgvYXRtZWwtbGNkYy5oICAgLSBkZWZpbml0aW9ucyBzaGFyZWQgd2l0 aCB0aGUgcHdtIHN1YmRyaXZlcgphdG1lbF9sY2RjX2Rydi5jICAgICAgICAtIGFsbCB0aGUgZHJp dmVyIGRldGFpbHMgc3VjaCBhcyBEVCBzdXBwb3J0IGV0Yy4KYXRtZWxfbGNkY19waXBlLmMgICAg ICAgLSB0aGUgZGlzcGxheSBwaXBlbGluZSwgaW5jbHVkaW5nIHRoZSBvdXRwdXRzCgp2MzoKLSBy ZXdvcmtlZCBtb3N0IG9mIHRoZSBkcml2ZXIgYWZ0ZXIgZmVlZGJhY2sgYW5kIG1vcmUgdGVzdGlu ZwoKU2lnbmVkLW9mZi1ieTogU2FtIFJhdm5ib3JnIDxzYW1AcmF2bmJvcmcub3JnPgpDYzogTmlj b2xhcyBGZXJyZSA8bmljb2xhcy5mZXJyZUBhdG1lbC5jb20+CkNjOiBCb3JpcyBCcmV6aWxsb24g PGJvcmlzLmJyZXppbGxvbkBmcmVlLWVsZWN0cm9ucy5jb20+CkNjOiBBbGV4YW5kcmUgQmVsbG9u aSA8YWxleGFuZHJlLmJlbGxvbmlAYm9vdGxpbi5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL01h a2VmaWxlICAgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9hdG1lbC9LY29u ZmlnICAgICAgICAgICB8ICAxMiArCiBkcml2ZXJzL2dwdS9kcm0vYXRtZWwvTWFrZWZpbGUgICAg ICAgICAgfCAgIDMgKwogZHJpdmVycy9ncHUvZHJtL2F0bWVsL2F0bWVsX2xjZGMuaCAgICAgIHwg IDgxICsrKwogZHJpdmVycy9ncHUvZHJtL2F0bWVsL2F0bWVsX2xjZGNfZHJ2LmMgIHwgNDA4ICsr KysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vYXRtZWwvYXRtZWxfbGNkY19waXBlLmMgfCA2 NzUgKysrKysrKysrKysrKysrKysrKysrKysrCiA2IGZpbGVzIGNoYW5nZWQsIDExODAgaW5zZXJ0 aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hdG1lbC9hdG1lbF9s Y2RjLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYXRtZWwvYXRtZWxfbGNk Y19kcnYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hdG1lbC9hdG1lbF9s Y2RjX3BpcGUuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZl cnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCBkN2Y1MzI4OTE4YWIuLjM4NmZjNjE2NmRlMSAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9N YWtlZmlsZQpAQCAtODcsNiArODcsNyBAQCBvYmotJChDT05GSUdfRFJNX1VETCkgKz0gdWRsLwog b2JqLSQoQ09ORklHX0RSTV9BU1QpICs9IGFzdC8KIG9iai0kKENPTkZJR19EUk1fQVJNQURBKSAr PSBhcm1hZGEvCiBvYmotJChDT05GSUdfRFJNX0FUTUVMX0hMQ0RDKQkrPSBhdG1lbC8KK29iai0k KENPTkZJR19EUk1fQVRNRUxfTENEQykJKz0gYXRtZWwvCiBvYmoteQkJCSs9IHJjYXItZHUvCiBv YmotJChDT05GSUdfRFJNX1NITU9CSUxFKSArPXNobW9iaWxlLwogb2JqLXkJCQkrPSBvbWFwZHJt LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2F0bWVsL0tjb25maWcgYi9kcml2ZXJzL2dw dS9kcm0vYXRtZWwvS2NvbmZpZwppbmRleCA1ZjY3ZjAwMTU1M2IuLjE0MDVhZTI4MDJhMyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2F0bWVsL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2F0bWVsL0tjb25maWcKQEAgLTksMyArOSwxNSBAQCBjb25maWcgRFJNX0FUTUVMX0hMQ0RD CiAJaGVscAogCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGFuIEFUTUVMIFNvQyB3 aXRoIGFuIEhMQ0RDIGRpc3BsYXkKIAkgIGNvbnRyb2xsZXIgKGkuZS4gYXQ5MXNhbTluMTIsIGF0 OTFzYW05eDUgZmFtaWx5IG9yIHNhbWE1ZDMgZmFtaWx5KS4KKworY29uZmlnIERSTV9BVE1FTF9M Q0RDCisJdHJpc3RhdGUgIkRSTSBTdXBwb3J0IGZvciBBVE1FTCBMQ0RDIERpc3BsYXkgQ29udHJv bGxlciIKKwlkZXBlbmRzIG9uIERSTSAmJiBPRiAmJiBDT01NT05fQ0xLICYmIE1GRF9BVE1FTF9M Q0RDCisJZGVwZW5kcyBvbiBBUk0gfHwgQ09NUElMRV9URVNUCisJc2VsZWN0IERSTV9HRU1fQ01B X0hFTFBFUgorCXNlbGVjdCBEUk1fS01TX0hFTFBFUgorCXNlbGVjdCBEUk1fS01TX0NNQV9IRUxQ RVIKKwlzZWxlY3QgRFJNX1BBTkVMCisJaGVscAorCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlv dSBoYXZlIGFuIEFUTUVMIFNvQyB3aXRoIGFuIExDREMgZGlzcGxheQorCSAgY29udHJvbGxlciAo Zm91bmQgb24gbWFueSBTb0MncyBpbiB0aGUgYXQ5MXNhbTkgZmFtaWx5KS4KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9hdG1lbC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9hdG1lbC9N YWtlZmlsZQppbmRleCA0OWRjODlmMzZiNzMuLjlkOTU1NDNmMzlhMyAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2F0bWVsL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hdG1lbC9N YWtlZmlsZQpAQCAtNSwzICs1LDYgQEAgYXRtZWwtaGxjZGMtZGMteSA6PSBhdG1lbF9obGNkY19j cnRjLm8gXAogCQlhdG1lbF9obGNkY19wbGFuZS5vCiAKIG9iai0kKENPTkZJR19EUk1fQVRNRUxf SExDREMpCSs9IGF0bWVsLWhsY2RjLWRjLm8KKworYXRtZWwtbGNkYy15IDo9IGF0bWVsX2xjZGNf ZHJ2Lm8gYXRtZWxfbGNkY19waXBlLm8KK29iai0kKENPTkZJR19EUk1fQVRNRUxfTENEQykJKz0g YXRtZWwtbGNkYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXRtZWwvYXRtZWxfbGNk Yy5oIGIvZHJpdmVycy9ncHUvZHJtL2F0bWVsL2F0bWVsX2xjZGMuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmUxYjMyOTBjM2M4MQotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9hdG1lbC9hdG1lbF9sY2RjLmgKQEAgLTAsMCArMSw4MSBAQAorLyog U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMp IDIwMTggU2FtIFJhdm5ib3JnCisgKgorICogQXV0aG9yOiBTYW0gUmF2bmJvcmcgPHNhbUByYXZu Ym9yZy5vcmc+CisgKi8KKworI2lmbmRlZiBfX0RSTV9BVE1FTF9MQ0RDX0gKKyNkZWZpbmUgX19E Uk1fQVRNRUxfTENEQ19ICisKKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworI2luY2x1 ZGUgPGRybS9kcm1fY29ubmVjdG9yLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9zaW1wbGVfa21zX2hl bHBlci5oPgorCisjaW5jbHVkZSA8bGludXgvbWZkL2F0bWVsLWxjZGMuaD4KKworc3RydWN0IGNs azsKK3N0cnVjdCByZWdtYXA7CitzdHJ1Y3QgcmVndWxhdG9yOworCisjZGVmaW5lIEFUTUVMX0xD RENfRE1BX0JVUlNUX0xFTgk4CS8qIHdvcmRzICovCisKKy8qCisgKiBzdHJ1Y3QgYXRtZWxfbGNk Y19kZXNjIC0gQ1BVIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcworICovCitzdHJ1 Y3QgYXRtZWxfbGNkY19kZXNjIHsKKwkvKiBEZWZhdWx0IGlzIDEsIG1heWJlIHdlIG5lZWQgdG8g Y2hhbmdlIHRoaXMgbGF0ZXIgKi8KKwlpbnQgZ3VhcmRfdGltZTsKKworCS8qIDUxMiBvciAyMDE4 ICovCisJaW50IGZpZm9fc2l6ZTsKKworCS8qIE1heGltdW0gcmVzb2x1dGlvbiAqLworCWludCBt YXhfd2lkdGg7CisJaW50IG1heF9oZWlnaHQ7CisKKwkvKiBmYWxzZSBpZiAiUGl4ZWxfY2xvY2sg PSBzeXN0ZW1fY2xvY2sgLyAoQ0xLVkFMICsgMSkgeCAyIiAqLworCS8qIHRydWUgaWYgIlBpeGVs X2Nsb2NrID0gc3lzdGVtX2Nsb2NrIC8gKENMS1ZBTCArIDEpIiAqLworCWJvb2wgaGF2ZV9hbHRf cGl4Y2xvY2s7Cit9OworCisvKgorICogUHJpdmF0ZSBkYXRhIGZvciB0aGUgbGNkYyBkcml2ZXIK KyAqLworc3RydWN0IGxjZGMgeworCXN0cnVjdCBkcm1fZGV2aWNlIGRybTsKKwlzdHJ1Y3QgZGV2 aWNlICpkZXY7CisKKwljb25zdCBzdHJ1Y3QgYXRtZWxfbGNkY19kZXNjICpkZXNjOworCisJc3Ry dWN0IGF0bWVsX21mZF9sY2RjICptZmQ7CisKKwlib29sIHdpcmluZ19yZXZlcnNlZDsJLyogU2Vs ZWN0IGJldHdlZW4gQkdSIG9yIFJHQiAqLworCisJc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9w aXBlIHBpcGU7CisJc3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X2xjZGNfd29yazsKKworCXN0cnVj dCBkcm1fcGFuZWwgKnBhbmVsOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisK KwlzdHJ1Y3QgbXV0ZXggZW5hYmxlX2xvY2s7CisJYm9vbCBlbmFibGVkOworCisJLyogU2F2ZWQg c3RhdGUgZHVyaW5nIHN1c3BlbmQgKi8KKwlzdHJ1Y3QgeworCQl1MzIgaW1yOworCQkvKiB0cnVl IGlmIHN1c3BlbmRlZCAqLworCQlib29sIHN0YXRlOworCX0gc3VzcGVuZDsKK307CisKKy8qIGF0 bWVsX2xjZGNfcGlwZS5jICovCitpbnQgYXRtZWxfbGNkY192YmxhbmtfaW5pdChzdHJ1Y3QgbGNk YyAqbGNkYyk7Cit2b2lkIGF0bWVsX2xjZGNfdmJsYW5rKHN0cnVjdCBsY2RjICpsZGNkKTsKKwor dm9pZCBhdG1lbF9sY2RjX3N0YXJ0KHN0cnVjdCBsY2RjICpsY2RjKTsKK3ZvaWQgYXRtZWxfbGNk Y19zdG9wKHN0cnVjdCBsY2RjICpsY2RjKTsKK2ludCBhdG1lbF9sY2RjX21vZGVzZXRfaW5pdChz dHJ1Y3QgbGNkYyAqbGNkYyk7CisKKyNlbmRpZiAvKiBfX0RSTV9BVE1FTF9MQ0RDX0ggKi8KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hdG1lbC9hdG1lbF9sY2RjX2Rydi5jIGIvZHJpdmVy cy9ncHUvZHJtL2F0bWVsL2F0bWVsX2xjZGNfZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi4yYzk0NzYxZWE2NDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vYXRtZWwvYXRtZWxfbGNkY19kcnYuYwpAQCAtMCwwICsxLDQwOCBAQAorLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgg U2FtIFJhdm5ib3JnCisgKgorICogVGhlIGRyaXZlciBpcyBiYXNlZCBvbiBhdG1lbF9sY2RmYiB3 aGljaCBpczoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBdG1lbCBDb3Jwb3JhdGlvbgorICoKKyAq LworCisvKioKKyAqIERPQzogQXRtZWwgTENEIENvbnRyb2xsZXIgRGlzcGxheSBDb250cm9sbGVy LgorICoKKyAqIFRoZSBBdG1lbCBMQ0QgQ29udHJvbGxlciBzdXBwb3J0cyBpbiB0aGUgZm9sbG93 aW5nIGNvbmZpZ3VyYXRpb246CisgKiAtIFRGVCBvbmx5LCAyNCBiaXRzL3BpeGVsCisgKiAtIFJl c29sdXRpb24gdXAgdG8gMjA0OHgyMDQ4CisgKiAtIFNpbmdsZSBwbGFuZSwgY3J0Yywgb25lIGZp eGVkIG91dHB1dAorICoKKyAqIEZlYXR1cmVzIG5vdCAoeWV0KSBwb3J0ZWQgZnJvbSBhdG1lbF9s Y2RmYjoKKyAqIC0gc2V0IGNvbG9yIC8gcGFsZXR0ZSBoYW5kbGluZworICovCisKKyNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRl IDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+ CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisKKyNpbmNsdWRlIDxkcm0v ZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9kcnYuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgor I2luY2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ly cS5oPgorI2luY2x1ZGUgPGRybS9kcm1fcHJpbnQuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3Byb2Jl X2hlbHBlci5oPgorCisjaW5jbHVkZSAiYXRtZWxfbGNkYy5oIgorCisvKiBDb25maWd1cmF0aW9u IG9mIGluZGl2aWR1YWwgQ1BVJ3MgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRtZWxfbGNkY19k ZXNjIGxjZGNfYXQ5MXNhbTkyNjEgPSB7CisJLmd1YXJkX3RpbWUgPSAxLAorCS5maWZvX3NpemUg PSA1MTIsCisJLm1heF93aWR0aCA9IDIwNDgsCisJLm1heF9oZWlnaHQgPSAyMDQ4LAorCS5oYXZl X2FsdF9waXhjbG9jayA9IGZhbHNlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdG1lbF9s Y2RjX2Rlc2MgbGNkY19hdDkxc2FtOTI2MyA9IHsKKwkuZ3VhcmRfdGltZSA9IDEsCisJLmZpZm9f c2l6ZSA9IDIwNDgsCisJLm1heF93aWR0aCA9IDIwNDgsCisJLm1heF9oZWlnaHQgPSAyMDQ4LAor CS5oYXZlX2FsdF9waXhjbG9jayA9IGZhbHNlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBh dG1lbF9sY2RjX2Rlc2MgbGNkY19hdDkxc2FtOWcxMCA9IHsKKwkuZ3VhcmRfdGltZSA9IDEsCisJ LmZpZm9fc2l6ZSA9IDUxMiwKKwkubWF4X3dpZHRoID0gMjA0OCwKKwkubWF4X2hlaWdodCA9IDIw NDgsCisJLmhhdmVfYWx0X3BpeGNsb2NrID0gZmFsc2UsCit9OworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGF0bWVsX2xjZGNfZGVzYyBsY2RjX2F0OTFzYW05ZzQ1ID0geworCS5ndWFyZF90aW1lID0g MSwKKwkuZmlmb19zaXplID0gNTEyLAorCS5tYXhfd2lkdGggPSAyMDQ4LAorCS5tYXhfaGVpZ2h0 ID0gMjA0OCwKKwkuaGF2ZV9hbHRfcGl4Y2xvY2sgPSB0cnVlLAorfTsKKworc3RhdGljIGNvbnN0 IHN0cnVjdCBhdG1lbF9sY2RjX2Rlc2MgbGNkY19hdDkxc2FtOWc0NiA9IHsKKwkuZ3VhcmRfdGlt ZSA9IDEsCisJLmZpZm9fc2l6ZSA9IDUxMiwKKwkubWF4X3dpZHRoID0gMjA0OCwKKwkubWF4X2hl aWdodCA9IDIwNDgsCisJLmhhdmVfYWx0X3BpeGNsb2NrID0gdHJ1ZSwKK307CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgYXRtZWxfbGNkY19kZXNjIGxjZGNfYXQ5MXNhbTltMTAgPSB7CisJLmd1YXJk X3RpbWUgPSAxLAorCS5maWZvX3NpemUgPSA1MTIsCisJLm1heF93aWR0aCA9IDIwNDgsCisJLm1h eF9oZWlnaHQgPSAyMDQ4LAorCS5oYXZlX2FsdF9waXhjbG9jayA9IHRydWUsCit9OworCitzdGF0 aWMgY29uc3Qgc3RydWN0IGF0bWVsX2xjZGNfZGVzYyBsY2RjX2F0OTFzYW05bTExID0geworCS5n dWFyZF90aW1lID0gMSwKKwkuZmlmb19zaXplID0gNTEyLAorCS5tYXhfd2lkdGggPSAyMDQ4LAor CS5tYXhfaGVpZ2h0ID0gMjA0OCwKKwkuaGF2ZV9hbHRfcGl4Y2xvY2sgPSB0cnVlLAorfTsKKwor c3RhdGljIGNvbnN0IHN0cnVjdCBhdG1lbF9sY2RjX2Rlc2MgbGNkY19hdDkxc2FtOXJsID0gewor CS5ndWFyZF90aW1lID0gMSwKKwkuZmlmb19zaXplID0gNTEyLAorCS5tYXhfd2lkdGggPSAyMDQ4 LAorCS5tYXhfaGVpZ2h0ID0gMjA0OCwKKwkuaGF2ZV9hbHRfcGl4Y2xvY2sgPSBmYWxzZSwKK307 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGxjZGNfb2ZfbWF0Y2hbXSA9IHsK Kwl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05MjYxLWxjZGMiLCAgIC5kYXRhID0gJmxj ZGNfYXQ5MXNhbTkyNjEgfSwKKwl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05MjYzLWxj ZGMiLCAgIC5kYXRhID0gJmxjZGNfYXQ5MXNhbTkyNjMgfSwKKwl7IC5jb21wYXRpYmxlID0gImF0 bWVsLGF0OTFzYW05ZzEwLWxjZGMiLCAgIC5kYXRhID0gJmxjZGNfYXQ5MXNhbTlnMTAgfSwKKwl7 IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05ZzQ1LWxjZGMiLCAgIC5kYXRhID0gJmxjZGNf YXQ5MXNhbTlnNDUgfSwKKwl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05ZzQ1ZXMtbGNk YyIsIC5kYXRhID0gJmxjZGNfYXQ5MXNhbTlnNDUgfSwKKwl7IC5jb21wYXRpYmxlID0gImF0bWVs LGF0OTFzYW05ZzQ2LWxjZGMiLCAgIC5kYXRhID0gJmxjZGNfYXQ5MXNhbTlnNDYgfSwKKwl7IC5j b21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05bTEwLWxjZGMiLCAgIC5kYXRhID0gJmxjZGNfYXQ5 MXNhbTltMTAgfSwKKwl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05bTExLWxjZGMiLCAg IC5kYXRhID0gJmxjZGNfYXQ5MXNhbTltMTEgfSwKKwl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0 OTFzYW05cmwtbGNkYyIsICAgIC5kYXRhID0gJmxjZGNfYXQ5MXNhbTlybCB9LAorCXsgLyogc2Vu dGluZWwgKi8gfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBsY2RjX29mX21hdGNoKTsK KworCisvKiBzY2hlZHVsZWQgd29ya2VyIHRvIHJlc2V0IExDRCAqLworc3RhdGljIHZvaWQgcmVz ZXRfbGNkY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgbGNkYyAq bGNkYzsKKworCWxjZGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxjZGMsIHJlc2V0X2xj ZGNfd29yayk7CisKKwltdXRleF9sb2NrKCZsY2RjLT5lbmFibGVfbG9jayk7CisKKwkvKiBDaGVj ayB0aGF0IHdlIGFyZSBlbmFibGVkIGFuZCBub3Qgc3VzcGVuZGVkICovCisJaWYgKGxjZGMtPmVu YWJsZWQgJiYgIWxjZGMtPnN1c3BlbmQuc3RhdGUpIHsKKwkJYXRtZWxfbGNkY19zdG9wKGxjZGMp OworCQlhdG1lbF9sY2RjX3N0YXJ0KGxjZGMpOworCX0KKwltdXRleF91bmxvY2soJmxjZGMtPmVu YWJsZV9sb2NrKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGxjZGNfaXJxX2hhbmRsZXIoaW50 IGlycSwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07CisJdW5zaWduZWQg aW50IHN0YXR1czsKKwlzdHJ1Y3QgbGNkYyAqbGNkYzsKKwl1bnNpZ25lZCBpbnQgaW1yOworCXVu c2lnbmVkIGludCBpc3I7CisKKwlkcm0gPSBhcmc7CisJbGNkYyA9IGRybS0+ZGV2X3ByaXZhdGU7 CisKKwlyZWdtYXBfcmVhZChsY2RjLT5tZmQtPnJlZ21hcCwgQVRNRUxfTENEQ19JTVIsICZpbXIp OworCXJlZ21hcF9yZWFkKGxjZGMtPm1mZC0+cmVnbWFwLCBBVE1FTF9MQ0RDX0lTUiwgJmlzcik7 CisJc3RhdHVzID0gaW1yICYgaXNyOworCWlmICghc3RhdHVzKQorCQlyZXR1cm4gSVJRX05PTkU7 CisKKwlpZiAoc3RhdHVzICYgQVRNRUxfTENEQ19MU1RMTkkpCisJCWF0bWVsX2xjZGNfdmJsYW5r KGxjZGMpOworCisJaWYgKHN0YXR1cyAmIEFUTUVMX0xDRENfVUZMV0kpIHsKKwkJRFJNX0RFVl9J TkZPKGxjZGMtPmRldiwgIkZJRk8gdW5kZXJmbG93ICUjeFxuIiwgc3RhdHVzKTsKKwkJLyogcmVz ZXQgRE1BIGFuZCBGSUZPIHRvIGF2b2lkIHNjcmVlbiBzaGlmdGluZyAqLworCQlzY2hlZHVsZV93 b3JrKCZsY2RjLT5yZXNldF9sY2RjX3dvcmspOworCX0KKworCWlmIChzdGF0dXMgJiBBVE1FTF9M Q0RDX09XUkkpCisJCURSTV9ERVZfSU5GTyhsY2RjLT5kZXYsICJGSUZPIG92ZXJ3cml0ZSBpbnRl cnJ1cHRcbiIpOworCisJaWYgKHN0YXR1cyAmIEFUTUVMX0xDRENfTUVSSSkKKwkJRFJNX0RFVl9J TkZPKGxjZGMtPmRldiwgIkRNQSBtZW1vcnkgZXJyb3JcbiIpOworCisJLyogQ2xlYXIgYWxsIHJl cG9ydGVkIChmcm9tIElTUikgaW50ZXJydXB0cyAqLworCXJlZ21hcF93cml0ZShsY2RjLT5tZmQt PnJlZ21hcCwgQVRNRUxfTENEQ19JQ1IsIGlzcik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9 CisKK3N0YXRpYyBpbnQgbGNkY19pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRl dikKK3sKKwlzdHJ1Y3QgbGNkYyAqbGNkYzsKKwl1bnNpZ25lZCBpbnQgaWVyOworCisJbGNkYyA9 IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZXIgPSAwOworCS8qIEZJRk8gdW5kZXJmbG93IGludGVy cnVwdCBlbmFibGUgKi8KKwlpZXIgfD0gQVRNRUxfTENEQ19VRkxXSTsKKwkvKiBGSUZPIG92ZXJ3 cml0ZSBpbnRlcnJ1cHQgZW5hYmxlICovCisJaWVyIHw9IEFUTUVMX0xDRENfT1dSSTsKKwkvKiBE TUEgbWVtb3J5IGVycm9yIGludGVycnVwdCBlbmFibGUgKi8KKwlpZXIgfD0gQVRNRUxfTENEQ19N RVJJOworCXJlZ21hcF93cml0ZShsY2RjLT5tZmQtPnJlZ21hcCwgQVRNRUxfTENEQ19JRVIsIGll cik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbGNkY19pcnFfdW5pbnN0YWxsKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGxjZGMgKmxjZGM7CisJdW5zaWduZWQg aW50IGlzcjsKKworCWxjZGMgPSBkZXYtPmRldl9wcml2YXRlOworCisJLyogZGlzYWJsZSBhbGwg aW50ZXJydXB0cyAqLworCXJlZ21hcF93cml0ZShsY2RjLT5tZmQtPnJlZ21hcCwgQVRNRUxfTENE Q19JRFIsIH4wKTsKKwlyZWdtYXBfd3JpdGUobGNkYy0+bWZkLT5yZWdtYXAsIEFUTUVMX0xDRENf SUNSLCB+MCk7CisKKwkvKiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJcmVnbWFw X3JlYWQobGNkYy0+bWZkLT5yZWdtYXAsIEFUTUVMX0xDRENfSVNSLCAmaXNyKTsKK30KKworc3Rh dGljIHZvaWQgbGNkY19yZWxlYXNlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJc3RydWN0 IGxjZGMgKmxjZGM7CisKKwlsY2RjID0gZHJtLT5kZXZfcHJpdmF0ZTsKKworCWZsdXNoX3dvcmso JmxjZGMtPnJlc2V0X2xjZGNfd29yayk7CisJZHJtX2ttc19oZWxwZXJfcG9sbF9maW5pKGRybSk7 CisKKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0pOworCisJcG1fcnVudGltZV9nZXRfc3lu Yyhkcm0tPmRldik7CisJZHJtX2lycV91bmluc3RhbGwoZHJtKTsKKwlwbV9ydW50aW1lX3B1dF9z eW5jKGRybS0+ZGV2KTsKKwljYW5jZWxfd29ya19zeW5jKCZsY2RjLT5yZXNldF9sY2RjX3dvcmsp OworCXBtX3J1bnRpbWVfZGlzYWJsZShkcm0tPmRldik7CisKKwlkcm1fZGV2X2ZpbmkoZHJtKTsK KwlrZnJlZShsY2RjKTsKK30KKworREVGSU5FX0RSTV9HRU1fQ01BX0ZPUFMobGNkY19kcm1fZm9w cyk7CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBsY2RjX2RybV9kcml2ZXIgPSB7CisJLmRy aXZlcl9mZWF0dXJlcyA9IERSSVZFUl9HRU0gfCBEUklWRVJfTU9ERVNFVCB8IERSSVZFUl9BVE9N SUMsCisJLm5hbWUgPSBBVE1FTF9MQ0RDX0RSTV9EUlZfTkFNRSwKKwkuZGVzYyA9ICJBdG1lbCBM Q0QgRGlzcGxheSBDb250cm9sbGVyIERSTSIsCisJLmRhdGUgPSAiMjAxODA4MDgiLAorCS5tYWpv ciA9IDEsCisJLm1pbm9yID0gMCwKKwkucGF0Y2hsZXZlbCA9IDAsCisKKwkuaXJxX2hhbmRsZXIg PSBsY2RjX2lycV9oYW5kbGVyLAorCS5pcnFfcHJlaW5zdGFsbCA9IGxjZGNfaXJxX3VuaW5zdGFs bCwKKwkuaXJxX3Bvc3RpbnN0YWxsID0gbGNkY19pcnFfcG9zdGluc3RhbGwsCisJLmlycV91bmlu c3RhbGwgPSBsY2RjX2lycV91bmluc3RhbGwsCisKKwkuZm9wcyA9ICZsY2RjX2RybV9mb3BzLAor CS5yZWxlYXNlID0gbGNkY19yZWxlYXNlLAorCisJRFJNX0dFTV9DTUFfVk1BUF9EUklWRVJfT1BT LAorfTsKKworc3RhdGljIGludCBsY2RjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCit7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CisJc3RydWN0IGF0bWVs X21mZF9sY2RjICptZmQ7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybTsKKwlzdHJ1Y3QgZGV2aWNl ICpkZXY7CisJc3RydWN0IGxjZGMgKmxjZGM7CisJaW50IHJldDsKKworCWRldiA9IHBkZXYtPmRl di5wYXJlbnQ7CisJbWZkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJLyogdGhlIE1GRCBkZXZp Y2UgZHJpdmVyIHByZXBhcmVzIGNsb2NrcyBldGMuICovCisJaWYgKCFtZmQpCisJCXJldHVybiAt RVBST0JFX0RFRkVSOworCisKKwlsY2RjID0ga3phbGxvYyhzaXplb2YoKmxjZGMpLCBHRlBfS0VS TkVMKTsKKwlpZiAoIWxjZGMpCisJCXJldHVybiAtRU5PTUVNOworCisJZHJtID0gJmxjZGMtPmRy bTsKKwlyZXQgPSBkZXZtX2RybV9kZXZfaW5pdChkZXYsIGRybSwgJmxjZGNfZHJtX2RyaXZlcik7 CisJaWYgKHJldCkgeworCQlrZnJlZShsY2RjKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwltYXRj aCA9IG9mX21hdGNoX25vZGUobGNkY19vZl9tYXRjaCwgZGV2LT5vZl9ub2RlKTsKKwlpZiAoIW1h dGNoIHx8ICFtYXRjaC0+ZGF0YSkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgImZhaWxlZCB0byBm aW5kIGNvbXBhdGlibGUgbWF0Y2hcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlsY2Rj LT5kZXNjID0gbWF0Y2gtPmRhdGE7CisKKwlkcm0tPmRldl9wcml2YXRlID0gbGNkYzsKKwlsY2Rj LT5kZXYgPSBkZXY7CisJbGNkYy0+bWZkID0gbWZkOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBk ZXYsIGRybSk7CisKKwltdXRleF9pbml0KCZsY2RjLT5lbmFibGVfbG9jayk7CisKKwkvKiByZXNl dCBvZiBsY2RjIG1pZ2h0IHNsZWVwIGFuZCByZXF1aXJlIGEgcHJlZW1wdGlibGUgdGFzayBjb250 ZXh0ICovCisJSU5JVF9XT1JLKCZsY2RjLT5yZXNldF9sY2RjX3dvcmssIHJlc2V0X2xjZGNfd29y ayk7CisKKwlwbV9ydW50aW1lX2VuYWJsZShkZXYpOworCisJcmV0ID0gYXRtZWxfbGNkY192Ymxh bmtfaW5pdChsY2RjKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9wbV9ydW50aW1lX2Rpc2FibGU7 CisKKwlyZXQgPSBhdG1lbF9sY2RjX21vZGVzZXRfaW5pdChsY2RjKTsKKwlpZiAocmV0KQorCQln b3RvIGVycl9wbV9ydW50aW1lX2Rpc2FibGU7CisKKwlwbV9ydW50aW1lX2dldF9zeW5jKGRldik7 CisKKwlyZXQgPSBkcm1faXJxX2luc3RhbGwoZHJtLCBtZmQtPmlycSk7CisJcG1fcnVudGltZV9w dXRfc3luYyhkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiZmFp bGVkIHRvIGluc3RhbGwgSVJROiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfcG1fcnVudGltZV9k aXNhYmxlOworCX0KKworCWRybV9rbXNfaGVscGVyX3BvbGxfaW5pdChkcm0pOworCisJcmV0ID0g ZHJtX2Rldl9yZWdpc3Rlcihkcm0sIDApOworCWlmIChyZXQpIHsKKwkJRFJNX0RFVl9FUlJPUihk ZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgZHJtOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfcG1f cnVudGltZV9kaXNhYmxlOworCX0KKworCXJldCA9IGRybV9mYmRldl9nZW5lcmljX3NldHVwKGRy bSwgMjQpOworCWlmIChyZXQgPCAwKQorCQlEUk1fREVWX0VSUk9SKGRldiwgImZhaWxlZCB0byBp bml0aWFsaXplIGZiZGV2OiAlZFxuIiwgcmV0KTsKKworCXJldHVybiAwOworCitlcnJfcG1fcnVu dGltZV9kaXNhYmxlOgorCWNhbmNlbF93b3JrX3N5bmMoJmxjZGMtPnJlc2V0X2xjZGNfd29yayk7 CisJcG1fcnVudGltZV9kaXNhYmxlKGRldik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg aW50IGxjZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0 IGRybV9kZXZpY2UgKmRybTsKKworCWRybSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwor CWRybV9kZXZfdW5yZWdpc3Rlcihkcm0pOworCWRybV9hdG9taWNfaGVscGVyX3NodXRkb3duKGRy bSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbGNkY19zaHV0ZG93bihzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWRybV9hdG9taWNfaGVscGVyX3NodXRkb3duKHBs YXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpKTsKK30KKworc3RhdGljIGludCBfX21heWJlX3VudXNl ZCBsY2RjX2RybV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtOworCXN0cnVjdCBsY2RjICpsY2RjOworCWludCByZXQ7CisKKwlkcm0gPSBkZXZf Z2V0X2RydmRhdGEoZGV2KTsKKwlsY2RjID0gZHJtLT5kZXZfcHJpdmF0ZTsKKworCXJldCA9IGRy bV9tb2RlX2NvbmZpZ19oZWxwZXJfc3VzcGVuZChkcm0pOworCWlmIChyZXQgPCAwKQorCQlyZXR1 cm4gcmV0OworCisJbGNkYy0+c3VzcGVuZC5zdGF0ZSA9IHRydWU7CisKKwkvKiBEaXNhYmxlIGlu dGVycnVwdHMgKi8KKwlyZWdtYXBfcmVhZChsY2RjLT5tZmQtPnJlZ21hcCwgQVRNRUxfTENEQ19J TVIsICZsY2RjLT5zdXNwZW5kLmltcik7CisJcmVnbWFwX3dyaXRlKGxjZGMtPm1mZC0+cmVnbWFw LCBBVE1FTF9MQ0RDX0lEUiwgbGNkYy0+c3VzcGVuZC5pbXIpOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgbGNkY19kcm1fcmVzdW1lKHN0cnVjdCBkZXZpY2Ug KmRldikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtOworCXN0cnVjdCBsY2RjICpsY2RjOwor CisJZHJtID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJbGNkYyA9IGRybS0+ZGV2X3ByaXZhdGU7 CisKKwkvKiBFbmFibGUgaW50ZXJydXB0cyAqLworCXJlZ21hcF93cml0ZShsY2RjLT5tZmQtPnJl Z21hcCwgQVRNRUxfTENEQ19JRVIsIGxjZGMtPnN1c3BlbmQuaW1yKTsKKworCWxjZGMtPnN1c3Bl bmQuc3RhdGUgPSBmYWxzZTsKKwlyZXR1cm4gZHJtX21vZGVfY29uZmlnX2hlbHBlcl9yZXN1bWUo ZHJtKTsKK30KKworc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKGxjZGNfcG1fb3BzLAorCQlsY2Rj X2RybV9zdXNwZW5kLCBsY2RjX2RybV9yZXN1bWUpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3Jt X2RyaXZlciBsY2RjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9IEFUTUVMX0xD RENfRFJNX0RSVl9OQU1FLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBsY2RjX29mX21hdGNoLAorCQku cG0gPSAmbGNkY19wbV9vcHMsCisJfSwKKwkucHJvYmUgPSBsY2RjX3Byb2JlLAorCS5yZW1vdmUg PSBsY2RjX3JlbW92ZSwKKwkuc2h1dGRvd24gPSBsY2RjX3NodXRkb3duLAorfTsKKworbW9kdWxl X3BsYXRmb3JtX2RyaXZlcihsY2RjX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIlNhbSBSYXZu Ym9yZyA8c2FtQHJhdm5ib3JnLm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQXRtZWwgTENE QyBEaXNwbGF5IENvbnRyb2xsZXIgRFJNIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2 MiIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTphdG1lbC1sY2RjIik7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vYXRtZWwvYXRtZWxfbGNkY19waXBlLmMgYi9kcml2ZXJzL2dwdS9kcm0v YXRtZWwvYXRtZWxfbGNkY19waXBlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwLi5jNDAxNzVjZDFlMWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v YXRtZWwvYXRtZWxfbGNkY19waXBlLmMKQEAgLTAsMCArMSw2NzUgQEAKKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFNhbSBSYXZu Ym9yZworICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+Cisj aW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorCisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNf aGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxkcm0vZHJt X2ZiX2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZvdXJjYy5oPgorI2luY2x1ZGUg PGRybS9kcm1fZ2VtX2ZyYW1lYnVmZmVyX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fb2Yu aD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wcmludC5o PgorI2luY2x1ZGUgPGRybS9kcm1fdmJsYW5rLmg+CisKKyNpbmNsdWRlICJhdG1lbF9sY2RjLmgi CisKKy8qKgorICogRE9DOiBEaXNwbGF5IHBpcGUgZm9yIEF0bWVsIExDREMKKyAqCisgKiBUaGUg TENEQyBkaXNwbGF5IHBpcGUgdXRpbGl6ZSB0aGUgZHJtX3NpbXBsZV9rbXNfaGVscGVyIGluZnJh c3RydWN0dXJlCisgKiB0byBwcm92aWRlIHRoZSBuZWNlc3NhcnkgRFJNIGZ1bmN0aW9uYWxpdHku CisgKgorICogVGhlIExDREMgSVAgY29yZSBpcyBhbHdheXMgdXNlZCBpbiBzZXR1cHMgd2l0aCBv bmx5IGEgc2luZ2xlCisgKiBvdXRwdXQgd2l0aCBkaXJlY3QgY29ubmVjdGlvbiB0byBhIHBhbmVs LgorICovCisKKy8qCisgKiBBdG1lbCBMQ0QgY29udHJvbGxlciAyNCBiaXQgZm9ybWF0cy4KKyAq IEZvcm1hdHMgZm9yIHJldmVyc2VkIHdpcmluZyBpbmNsdWRlZC4KKyAqLworc3RhdGljIGNvbnN0 IHUzMiBiZ3JfZm9ybWF0c1tdID0geworCURSTV9GT1JNQVRfWEJHUjg4ODgsCisJRFJNX0ZPUk1B VF9CR1I4ODgsCisJRFJNX0ZPUk1BVF9CR1I1NjUsCit9OworCitzdGF0aWMgY29uc3QgdTMyIHJn Yl9mb3JtYXRzW10gPSB7CisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFUX1JHQjg4 OCwKKwlEUk1fRk9STUFUX1JHQjU2NSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIqIGdldF9mb3Jt YXRzKGJvb2wgcmV2ZXJzZWQsIHNpemVfdCAqbmZvcm1hdHMpCit7CisJaWYgKHJldmVyc2VkKSB7 CisJCS8qIEIgYW5kIFIgYXJlIHN3YXBwZWQgaW4gSFcgKi8KKwkJKm5mb3JtYXRzID0gQVJSQVlf U0laRShyZ2JfZm9ybWF0cyk7CisJCXJldHVybiByZ2JfZm9ybWF0czsKKwl9IGVsc2UgeworCQkv KiBOb3JtYWwgd2lyaW5nLCB1c2UgQkdSIGZvcm1hdHMgKi8KKwkJKm5mb3JtYXRzID0gQVJSQVlf U0laRShiZ3JfZm9ybWF0cyk7CisJCXJldHVybiBiZ3JfZm9ybWF0czsKKwl9Cit9CisKK3N0YXRp YyB2b2lkIHNldF9sY2Rjb24yKHN0cnVjdCBsY2RjICpsY2RjLAorCQkJY29uc3Qgc3RydWN0IGRy bV9mb3JtYXRfaW5mbyAqZm9ybWF0KQoreworCXN0cnVjdCBkcm1fZm9ybWF0X25hbWVfYnVmIGZv cm1hdF9idWY7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRtb2RlOworCXVuc2lnbmVkIGlu dCBsY2Rjb24yOworCXUzMiBidXNfZmxhZ3M7CisKKwlkbW9kZSA9ICZsY2RjLT5waXBlLmNydGMu c3RhdGUtPmFkanVzdGVkX21vZGU7CisKKwkvKiBDb250cm9sIHJlZ2lzdGVyIDIgKi8KKwkvKiBP bmx5IFRGVCBzdXBwb3J0ZWQgKENvbnRyb2xsZXIgc3VwcG9ydHMgU1ROIHRvbykgKi8KKwlsY2Rj b24yID0gQVRNRUxfTENEQ19ESVNUWVBFX1RGVDsKKworCS8qIHNjYW4gbW9kZSAqLworCWlmIChk bW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0RCTFNDQU4pCisJCWxjZGNvbjIgfD0gQVRNRUxf TENEQ19TQ0FOTU9EX0RVQUw7CisJZWxzZQorCQlsY2Rjb24yIHw9IEFUTUVMX0xDRENfU0NBTk1P RF9TSU5HTEU7CisKKwkvKiBJbnRlcmZhY2Ugd2lkdGggNCBiaXRzIChTVE4gb25seSkgKi8KKwls Y2Rjb24yIHw9IEFUTUVMX0xDRENfSUZXSURUSF80OworCisJc3dpdGNoIChmb3JtYXQtPmZvcm1h dCkgeworCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4 ODg6CisJCS8qIDMyIGJpdCBsYXlvdXQgKi8KKwkJbGNkY29uMiB8PSBBVE1FTF9MQ0RDX1BJWEVM U0laRV8yNDsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX0JHUjg4ODoKKwljYXNlIERSTV9G T1JNQVRfUkdCODg4OgorCQkvKiAyNCBiaXQgbGF5b3V0ICovCisJCWxjZGNvbjIgfD0gQVRNRUxf TENEQ19QSVhFTFNJWkVfMjRfUEFDS0VEOworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfQkdS NTY1OgorCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6CisJCS8qIDE2IGJpdCBsYXlvdXQgKi8KKwkJ bGNkY29uMiB8PSBBVE1FTF9MQ0RDX1BJWEVMU0laRV8xNjsKKwkJYnJlYWs7CisJZGVmYXVsdDoK KwkJbGNkY29uMiB8PSBBVE1FTF9MQ0RDX1BJWEVMU0laRV8yNDsKKwkJRFJNX0RFVl9JTkZPKGxj ZGMtPmRldiwgIlVuc3VwcG9ydGVkIGZvcm1hdCAlc1xuIiwKKwkJCSAgICAgZHJtX2dldF9mb3Jt YXRfbmFtZShmb3JtYXQtPmZvcm1hdCwgJmZvcm1hdF9idWYpKTsKKwl9CisKKwkvKiBMQ0REIFBv bGFyaXR5IG5vcm1hbCAqLworCWxjZGNvbjIgfD0gQVRNRUxfTENEQ19JTlZWRF9OT1JNQUw7CisK KwkvKiB2c3luYyBwb2xhcml0eSAtIFRPRE86IENoZWNrICEgYWdhaW4gKi8KKwlpZiAoIShkbW9k ZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BWU1lOQykpCisJCWxjZGNvbjIgfD0gQVRNRUxfTENE Q19JTlZGUkFNRV9JTlZFUlRFRDsKKwllbHNlCisJCWxjZGNvbjIgfD0gQVRNRUxfTENEQ19JTlZG UkFNRV9OT1JNQUw7CisKKwkvKiBoc3luYyBwb2xhcml0eSAtIFRPRE86IENoZWNrICEgYWdhaW4q LworCWlmICghKGRtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUEhTWU5DKSkKKwkJbGNkY29u MiB8PSBBVE1FTF9MQ0RDX0lOVkxJTkVfSU5WRVJURUQ7CisJZWxzZQorCQlsY2Rjb24yIHw9IEFU TUVMX0xDRENfSU5WTElORV9OT1JNQUw7CisKKwlidXNfZmxhZ3MgPSBsY2RjLT5jb25uZWN0b3It PmRpc3BsYXlfaW5mby5idXNfZmxhZ3M7CisKKwkvKiBkb3QgY2xvY2sgKHBpeCBjbG9jaykgcG9s YXJpdHkgKi8KKwlpZiAoYnVzX2ZsYWdzICYgRFJNX0JVU19GTEFHX1BJWERBVEFfTkVHRURHRSkK KwkJbGNkY29uMiB8PSBBVE1FTF9MQ0RDX0lOVkNMS19JTlZFUlRFRDsKKwllbHNlCisJCWxjZGNv bjIgfD0gQVRNRUxfTENEQ19JTlZDTEtfTk9STUFMOworCisJLyogRGF0ZSBFbmFibGUgcG9sYXJp dHkgKi8KKwlpZiAoYnVzX2ZsYWdzICYgRFJNX0JVU19GTEFHX0RFX0xPVykKKwkJbGNkY29uMiB8 PSBBVE1FTF9MQ0RDX0lOVkRWQUxfSU5WRVJURUQ7CisJZWxzZQorCQlsY2Rjb24yIHw9IEFUTUVM X0xDRENfSU5WRFZBTF9OT1JNQUw7CisKKwkvKiBDbG9jayBpcyBhbHdheXMgYWN0aXZlICovCisJ bGNkY29uMiB8PSBBVE1FTF9MQ0RDX0NMS01PRF9BTFdBWVNBQ1RJVkU7CisKKwkvKiBNZW1vcnkg bGF5b3V0ICovCisJaWYgKGZvcm1hdC0+Zm9ybWF0ICYgRFJNX0ZPUk1BVF9CSUdfRU5ESUFOKQor CQlsY2Rjb24yIHw9IEFUTUVMX0xDRENfTUVNT1JfQklHOworCWVsc2UKKwkJbGNkY29uMiB8PSBB VE1FTF9MQ0RDX01FTU9SX0xJVFRMRTsKKworCXJlZ21hcF93cml0ZShsY2RjLT5tZmQtPnJlZ21h cCwgQVRNRUxfTENEQ19MQ0RDT04yLCBsY2Rjb24yKTsKK30KKworLyogQ2hlY2sgdGhhdCB0aGUg Y29uZmlndWF0aW9uIGlzIHN1cHBvcnRlZCAqLworc3RhdGljIGludCBsY2RjX3BpcGVfY2hlY2so c3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlLAorCQkJICAgc3RydWN0IGRybV9w bGFuZV9zdGF0ZSAqcHN0YXRlLAorCQkJICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpjc3RhdGUp Cit7CisJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRtb2RlOworCXN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiOworCXN0cnVjdCBsY2RjICpsY2RjOworCWxvbmcgY2xrX3JhdGU7CisK KwlsY2RjID0gcGlwZS0+Y3J0Yy5kZXYtPmRldl9wcml2YXRlOworCWRtb2RlID0gJmNzdGF0ZS0+ bW9kZTsKKwlmYiA9IHBzdGF0ZS0+ZmI7CisKKwlpZiAoIWZiKQorCQlyZXR1cm4gMDsKKworCS8q IENoZWNrIGlmIHdlIGNhbiBzdXBwb3J0IHRoZSByZXF1ZXN0ZWQgY2xvY2sgcmF0ZSAqLworCWNs a19yYXRlID0gZG1vZGUtPmNsb2NrICogMTAwMDsKKwlpZiAoY2xrX3JhdGUgPiBjbGtfZ2V0X3Jh dGUobGNkYy0+bWZkLT5sY2RjX2NsaykpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogT25seSBv bmUgcGxhbmUgc3VwcG9ydGVkICovCisJaWYgKGZiLT5mb3JtYXQtPm51bV9wbGFuZXMgIT0gMSkK KwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIERNQSBjb25maWcu IFNldCBmcmFtZSBzaXplIGFuZCBidXJzdCBsZW5ndGgKKyAqIEZyYW1lX3NpemUgZXF1YWxzIHNp emUgb2YgdmlzaWJsZSBhcmVhICogYml0cyAvIDMyCisgKiAoc2l6ZSBpbiAzMiBiaXQgd29yZHMp CisgKi8KK3N0YXRpYyB2b2lkIGxjZGNfcGlwZV9lbmFibGVfZG1hKHN0cnVjdCBsY2RjICpsY2Rj KQoreworCWNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmZvcm1hdF9pbmZvOworCXN0cnVj dCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOworCXVuc2lnbmVkIGludCB3aWR0aCwgaGVp Z2h0OworCXVuc2lnbmVkIGludCBmcmFtZV9zaXplOworCXVuc2lnbmVkIGludCBkbWFmcm1jZmc7 CisKKwlwbGFuZV9zdGF0ZSA9IGxjZGMtPnBpcGUucGxhbmUuc3RhdGU7CisJZm9ybWF0X2luZm8g PSBkcm1fZm9ybWF0X2luZm8ocGxhbmVfc3RhdGUtPmZiLT5mb3JtYXQtPmZvcm1hdCk7CisJd2lk dGggPSBwbGFuZV9zdGF0ZS0+Y3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGUuaGRpc3BsYXk7CisJ aGVpZ2h0ID0gcGxhbmVfc3RhdGUtPmNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlLnZkaXNwbGF5 OworCisJZnJhbWVfc2l6ZSA9IHdpZHRoICogaGVpZ2h0ICogZm9ybWF0X2luZm8tPmRlcHRoOwor CWRtYWZybWNmZyA9IGZyYW1lX3NpemUgLyAzMjsKKworCWRtYWZybWNmZyB8PSAoQVRNRUxfTENE Q19ETUFfQlVSU1RfTEVOIC0gMSkgPDwgQVRNRUxfTENEQ19CTEVOR1RIX09GRlNFVDsKKworCXJl Z21hcF93cml0ZShsY2RjLT5tZmQtPnJlZ21hcCwgQVRNRUxfTENEQ19ETUFGUk1DRkcsIGRtYWZy bWNmZyk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF92ZXJ0aWNhbF90aW1pbmcoc3RydWN0IGxjZGMg KmxjZGMsCisJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRtb2RlKQoreworCXVuc2lnbmVk IGludCB0aW0xOworCXVuc2lnbmVkIGludCB2ZnA7CisJdW5zaWduZWQgaW50IHZicDsKKwl1bnNp Z25lZCBpbnQgdnB3OworCXVuc2lnbmVkIGludCB2aGRseTsKKworCS8qIFZGUDogVmVydGljYWwg RnJvbnQgUG9yY2ggKi8KKwl2ZnAgPSBkbW9kZS0+dnN5bmNfc3RhcnQgLSBkbW9kZS0+dmRpc3Bs YXk7CisKKwkvKiBWQlA6IFZlcnRpY2FsIEJhY2sgUG9yY2ggKi8KKwl2YnAgPSBkbW9kZS0+dnRv dGFsIC0gZG1vZGUtPnZzeW5jX2VuZDsKKworCS8qIFZQVzogVmVydGljYWwgU3luY2hyb25pemF0 aW9uIHB1bHNlIHdpZHRoICovCisJdnB3ID0gZG1vZGUtPnZzeW5jX2VuZCAtIGRtb2RlLT52c3lu Y19zdGFydCAtIDE7CisKKwkvKiBWSERMWTogVmVydGljYWwgdG8gaG9yaXpvbnRhbCBkZWxheSAq LworCXZoZGx5ID0gMDsKKworCXRpbTEgPSB2ZnAgPDwgQVRNRUxfTENEQ19WRlBfT0ZGU0VUIHwK KwkgICAgICAgdmJwIDw8IEFUTUVMX0xDRENfVkJQX09GRlNFVCB8CisJICAgICAgIHZwdyA8PCBB VE1FTF9MQ0RDX1ZQV19PRkZTRVQgfAorCSAgICAgICB2aGRseSA8PCBBVE1FTF9MQ0RDX1ZIRExZ X09GRlNFVDsKKworCURSTV9ERVZfREVCVUcobGNkYy0+ZGV2LCAiIFRJTTEgPSAlMDh4XG4iLCB0 aW0xKTsKKwlyZWdtYXBfd3JpdGUobGNkYy0+bWZkLT5yZWdtYXAsIEFUTUVMX0xDRENfVElNMSwg dGltMSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9ob3Jpem9udGFsX3RpbWluZyhzdHJ1Y3QgbGNk YyAqbGNkYywKKwkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkbW9kZSkKK3sKKwl1bnNp Z25lZCBpbnQgdGltMjsKKwl1bnNpZ25lZCBpbnQgaGJwOworCXVuc2lnbmVkIGludCBocHc7CisJ dW5zaWduZWQgaW50IGhmcDsKKworCS8qIEhCUDogSG9yaXpvbnRhbCBCYWNrIFBvcmNoICovCisJ aGJwID0gZG1vZGUtPmh0b3RhbCAtIGRtb2RlLT5oc3luY19lbmQgLSAxOworCisJLyogSFBXOiBI b3Jpem9udGFsIHN5bmNocm9uaXphdGlvbiBwdWxzZSB3aWR0aCAqLworCWhwdyA9IGRtb2RlLT5o c3luY19lbmQgLSBkbW9kZS0+aHN5bmNfc3RhcnQgLSAxOworCisJLyogSEZQOiBIb3Jpem9udGFs IEZyb250IFBvcmNoICovCisJaGZwID0gZG1vZGUtPmhzeW5jX3N0YXJ0IC0gZG1vZGUtPmhkaXNw bGF5IC0gMjsKKworCXRpbTIgPSBoYnAgPDwgQVRNRUxfTENEQ19IQlBfT0ZGU0VUIHwKKwkgICAg ICAgaHB3IDw8IEFUTUVMX0xDRENfSFBXX09GRlNFVCB8CisJICAgICAgIGhmcCA8PCBBVE1FTF9M Q0RDX0hGUF9PRkZTRVQ7CisKKwlEUk1fREVWX0RFQlVHKGxjZGMtPmRldiwgIiBUSU0yID0gJTA4 eFxuIiwgdGltMik7CisJcmVnbWFwX3dyaXRlKGxjZGMtPm1mZC0+cmVnbWFwLCBBVE1FTF9MQ0RD X1RJTTIsIHRpbTIpOworfQorCitzdGF0aWMgdm9pZCBsY2RjX3BpcGVfZW5hYmxlX3RpbWluZyhz dHJ1Y3QgbGNkYyAqbGNkYykKK3sKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZG1vZGU7CisJ dW5zaWduZWQgaW50IHZhbHVlOworCisJZG1vZGUgPSAmbGNkYy0+cGlwZS5jcnRjLnN0YXRlLT5h ZGp1c3RlZF9tb2RlOworCisJLyogVmVydGljYWwgJiBob3Jpem9udGFsIHRpbWluZyAqLworCXNl dF92ZXJ0aWNhbF90aW1pbmcobGNkYywgZG1vZGUpOworCXNldF9ob3Jpem9udGFsX3RpbWluZyhs Y2RjLCBkbW9kZSk7CisKKwkvKiBEaXNwbGF5IHNpemUgKi8KKwl2YWx1ZSA9IChkbW9kZS0+Y3J0 Y19oZGlzcGxheSAtIDEpIDw8IEFUTUVMX0xDRENfSE9aVkFMX09GRlNFVDsKKwl2YWx1ZSB8PSBk bW9kZS0+Y3J0Y192ZGlzcGxheSAtIDE7CisJRFJNX0RFVl9ERUJVRyhsY2RjLT5kZXYsICIgTENE RlJNQ0ZHID0gJTA4eFxuIiwgdmFsdWUpOworCXJlZ21hcF93cml0ZShsY2RjLT5tZmQtPnJlZ21h cCwgQVRNRUxfTENEQ19MQ0RGUk1DRkcsIHZhbHVlKTsKKworCS8qIEZJRk8gVGhyZXNob2xkOiBV c2UgZm9ybXVsYSBmcm9tIGRhdGEgc2hlZXQgKi8KKwl2YWx1ZSA9IGxjZGMtPmRlc2MtPmZpZm9f c2l6ZSAtICgyICogQVRNRUxfTENEQ19ETUFfQlVSU1RfTEVOICsgMyk7CisJRFJNX0RFVl9ERUJV RyhsY2RjLT5kZXYsICIgRklGTyA9ICUwOHhcbiIsIHZhbHVlKTsKKwlyZWdtYXBfd3JpdGUobGNk Yy0+bWZkLT5yZWdtYXAsIEFUTUVMX0xDRENfRklGTywgdmFsdWUpOworCisJLyoKKwkgKiBUb2dn bGUgTENEX01PREUgZXZlcnkgZnJhbWUKKwkgKiBOb3RlOiByZWdpc3RlciBub3QgZG9jdW1lbnRl ZCwgdGhpcyBpcyBmcm9tIGF0bWVsX2xjZGZiCisJICovCisJcmVnbWFwX3dyaXRlKGxjZGMtPm1m ZC0+cmVnbWFwLCBBVE1FTF9MQ0RDX01WQUwsIDApOworfQorCitzdGF0aWMgdm9pZCBsY2RjX3Bp cGVfZW5hYmxlX2N0cmwoc3RydWN0IGxjZGMgKmxjZGMpCit7CisJY29uc3Qgc3RydWN0IGRybV9m b3JtYXRfaW5mbyAqZm9ybWF0OworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkbW9kZTsKKwl1 bnNpZ25lZCBsb25nIGNsa192YWx1ZV9raHo7CisJdW5zaWduZWQgaW50IHBpeF9mYWN0b3I7CisJ dW5zaWduZWQgaW50IGxjZGNvbjE7CisKKwlmb3JtYXQgPSBsY2RjLT5waXBlLmNydGMucHJpbWFy eS0+c3RhdGUtPmZiLT5mb3JtYXQ7CisJZG1vZGUgPSAmbGNkYy0+cGlwZS5jcnRjLnN0YXRlLT5h ZGp1c3RlZF9tb2RlOworCisJLyogTENEQyBDb250cm9sIHJlZ2lzdGVyIDEgKi8KKwkvKiBTZXQg cGl4ZWwgY2xvY2sgKi8KKwlpZiAobGNkYy0+ZGVzYy0+aGF2ZV9hbHRfcGl4Y2xvY2spCisJCXBp eF9mYWN0b3IgPSAxOworCWVsc2UKKwkJcGl4X2ZhY3RvciA9IDI7CisKKwljbGtfdmFsdWVfa2h6 ID0gY2xrX2dldF9yYXRlKGxjZGMtPm1mZC0+bGNkY19jbGspIC8gMTAwMDsKKwlsY2Rjb24xID0g RElWX1JPVU5EX1VQKGNsa192YWx1ZV9raHosIGRtb2RlLT5jbG9jayk7CisKKwlpZiAobGNkY29u MSA8IHBpeF9mYWN0b3IpIHsKKwkJRFJNX0RFVl9JTkZPKGxjZGMtPmRldiwgIkJ5cGFzc2luZyBw aXhlbCBjbG9jayBkaXZpZGVyXG4iKTsKKwkJcmVnbWFwX3dyaXRlKGxjZGMtPm1mZC0+cmVnbWFw LAorCQkJICAgICBBVE1FTF9MQ0RDX0xDRENPTjEsIEFUTUVMX0xDRENfQllQQVNTKTsKKwl9IGVs c2UgeworCisJCWxjZGNvbjEgPSAobGNkY29uMSAvIHBpeF9mYWN0b3IpIC0gMTsKKwkJRFJNX0RF Vl9ERUJVRyhsY2RjLT5kZXYsICJDTEtWQUwgPSAweCUwOHhcbiIsIGxjZGNvbjEpOworCQlyZWdt YXBfd3JpdGUobGNkYy0+bWZkLT5yZWdtYXAsIEFUTUVMX0xDRENfTENEQ09OMSwKKwkJCSAgICAg bGNkY29uMSA8PCBBVE1FTF9MQ0RDX0NMS1ZBTF9PRkZTRVQpOworCQlkbW9kZS0+Y2xvY2sgPSBj bGtfdmFsdWVfa2h6IC8gKHBpeF9mYWN0b3IgKiAobGNkY29uMSArIDEpKTsKKwkJRFJNX0RFVl9E RUJVRyhsY2RjLT5kZXYsICJ1cGRhdGVkIHBpeGNsazogICV1IEtIelxuIiwKKwkJCQkJZG1vZGUt PmNsb2NrKTsKKwl9CisKKwkvKiBMQ0RDIENvbnRyb2wgcmVnaXN0ZXIgMiAqLworCXNldF9sY2Rj b24yKGxjZGMsIGZvcm1hdCk7Cit9CisKK3N0YXRpYyB2b2lkIGxjZGNfcGlwZV9lbmFibGUoc3Ry dWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlLAorCQkJICAgICBzdHJ1Y3QgZHJtX2Ny dGNfc3RhdGUgKmNzdGF0ZSwKKwkJCSAgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVf c3RhdGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNy dGM7CisJc3RydWN0IGxjZGMgKmxjZGM7CisKKwljcnRjID0gJnBpcGUtPmNydGM7CisJZHJtID0g Y3J0Yy0+ZGV2OworCWxjZGMgPSBkcm0tPmRldl9wcml2YXRlOworCisJbXV0ZXhfbG9jaygmbGNk Yy0+ZW5hYmxlX2xvY2spOworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoZHJtLT5kZXYpOworCXBtX3J1 bnRpbWVfZm9yYmlkKGRybS0+ZGV2KTsKKworCWxjZGNfcGlwZV9lbmFibGVfdGltaW5nKGxjZGMp OworCWxjZGNfcGlwZV9lbmFibGVfZG1hKGxjZGMpOworCWxjZGNfcGlwZV9lbmFibGVfY3RybChs Y2RjKTsKKwlhdG1lbF9sY2RjX3N0YXJ0KGxjZGMpOworCWRybV9jcnRjX3ZibGFua19vbigmbGNk Yy0+cGlwZS5jcnRjKTsKKworCXBtX3J1bnRpbWVfcHV0X3N5bmMoZHJtLT5kZXYpOworCisJbGNk Yy0+ZW5hYmxlZCA9IHRydWU7CisJbXV0ZXhfdW5sb2NrKCZsY2RjLT5lbmFibGVfbG9jayk7Cit9 CisKK3N0YXRpYyB2b2lkIGxjZGNfcGlwZV9kaXNhYmxlKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3Bs YXlfcGlwZSAqcGlwZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtOworCXN0cnVjdCBkcm1f Y3J0YyAqY3J0YzsKKwlzdHJ1Y3QgbGNkYyAqbGNkYzsKKworCWNydGMgPSAmcGlwZS0+Y3J0YzsK Kwlkcm0gPSBjcnRjLT5kZXY7CisJbGNkYyA9IGRybS0+ZGV2X3ByaXZhdGU7CisKKwltdXRleF9s b2NrKCZsY2RjLT5lbmFibGVfbG9jayk7CisJcG1fcnVudGltZV9nZXRfc3luYyhkcm0tPmRldik7 CisKKwlkcm1fY3J0Y192Ymxhbmtfb2ZmKGNydGMpOworCWF0bWVsX2xjZGNfc3RvcChsY2RjKTsK KworCXBtX3J1bnRpbWVfYWxsb3coZHJtLT5kZXYpOworCXBtX3J1bnRpbWVfcHV0X3N5bmMoZHJt LT5kZXYpOworCisJbGNkYy0+ZW5hYmxlZCA9IGZhbHNlOworCW11dGV4X3VubG9jaygmbGNkYy0+ ZW5hYmxlX2xvY2spOworfQorCisKK3N0YXRpYyB2b2lkIGxjZGNfcGlwZV91cGRhdGVfZm9ybWF0 KHN0cnVjdCBsY2RjICpsY2RjLAorCQkJCSAgICBzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3Bp cGUgKnBpcGUpCit7CisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisJc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7CisKKwlwbGFuZV9zdGF0ZSA9IHBpcGUtPnBsYW5lLnN0 YXRlOworCWZiID0gcGxhbmVfc3RhdGUtPmZiOworCisJaWYgKGZiKQorCQlzZXRfbGNkY29uMihs Y2RjLCBmYi0+Zm9ybWF0KTsKK30KKworLyogVXBkYXRlIERNQSBhZGRyICovCitzdGF0aWMgdm9p ZCBsY2RjX3BpcGVfdXBkYXRlX2RtYShzdHJ1Y3QgbGNkYyAqbGNkYywKKwkJCQkgc3RydWN0IGRy bV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlKQoreworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOworCWRtYV9hZGRyX3Qg ZG1hX2FkZHI7CisKKwlwbGFuZV9zdGF0ZSA9IHBpcGUtPnBsYW5lLnN0YXRlOworCWZiID0gcGxh bmVfc3RhdGUtPmZiOworCisJaWYgKGZiKSB7CisJCWRtYV9hZGRyID0gZHJtX2ZiX2NtYV9nZXRf Z2VtX2FkZHIoZmIsIHBpcGUtPnBsYW5lLnN0YXRlLCAwKTsKKworCQkvKiBTZXQgZnJhbWUgYnVm ZmVyIERNQSBiYXNlIGFkZHJlc3MgKi8KKwkJcmVnbWFwX3dyaXRlKGxjZGMtPm1mZC0+cmVnbWFw LCBBVE1FTF9MQ0RDX0RNQUJBRERSMSwgZG1hX2FkZHIpOworCX0KK30KKworc3RhdGljIHZvaWQg bGNkY19waXBlX3VwZGF0ZV9ldmVudChzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBp cGUpCit7CisJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZXZlbnQ7CisJc3RydWN0 IGRybV9jcnRjICpjcnRjOworCisJY3J0YyA9ICZwaXBlLT5jcnRjOworCWlmICghY3J0YykKKwkJ cmV0dXJuOworCisJc3Bpbl9sb2NrX2lycSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrKTsKKwlldmVu dCA9IGNydGMtPnN0YXRlLT5ldmVudDsKKwlpZiAoZXZlbnQpIHsKKwkJY3J0Yy0+c3RhdGUtPmV2 ZW50ID0gTlVMTDsKKworCQlpZiAoZHJtX2NydGNfdmJsYW5rX2dldChjcnRjKSA9PSAwKQorCQkJ ZHJtX2NydGNfYXJtX3ZibGFua19ldmVudChjcnRjLCBldmVudCk7CisJCWVsc2UKKwkJCWRybV9j cnRjX3NlbmRfdmJsYW5rX2V2ZW50KGNydGMsIGV2ZW50KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJx KCZjcnRjLT5kZXYtPmV2ZW50X2xvY2spOworfQorCitzdGF0aWMgdm9pZCBsY2RjX3BpcGVfdXBk YXRlKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSwKKwkJCSAgICAgc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3BzdGF0ZSkKK3sKKwlzdHJ1Y3QgbGNkYyAqbGNkYzsKKwor CWxjZGMgPSBwaXBlLT5jcnRjLmRldi0+ZGV2X3ByaXZhdGU7CisKKwkvKiBGb3JtYXQgbWFuYWdl bWVudCAqLworCWxjZGNfcGlwZV91cGRhdGVfZm9ybWF0KGxjZGMsIHBpcGUpOworCisJLyogRE1B IGVuZ2luZS4uLiAqLworCWxjZGNfcGlwZV91cGRhdGVfZG1hKGxjZGMsIHBpcGUpOworCisJLyog dmJsYW5rIGV2ZW50IGhhbmRsaW5nICovCisJbGNkY19waXBlX3VwZGF0ZV9ldmVudChwaXBlKTsK K30KKworc3RhdGljIGludCBsY2RjX3BpcGVfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX3NpbXBs ZV9kaXNwbGF5X3BpcGUgKnBpcGUpCit7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCXN0cnVj dCBsY2RjICpsY2RjOworCisJY3J0YyAgPSAmcGlwZS0+Y3J0YzsKKwlsY2RjID0gY3J0Yy0+ZGV2 LT5kZXZfcHJpdmF0ZTsKKworCS8qIExhc3QgbGluZSBpbnRlcnJ1cHQgZW5hYmxlICovCisJcmVn bWFwX3dyaXRlKGxjZGMtPm1mZC0+cmVnbWFwLCBBVE1FTF9MQ0RDX0lFUiwgQVRNRUxfTENEQ19M U1RMTkkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxjZGNfcGlwZV9kaXNhYmxl X3ZibGFuayhzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGUpCit7CisJc3RydWN0 IGRybV9jcnRjICpjcnRjOworCXN0cnVjdCBsY2RjICpsY2RjOworCisJY3J0YyAgPSAmcGlwZS0+ Y3J0YzsKKwlsY2RjID0gY3J0Yy0+ZGV2LT5kZXZfcHJpdmF0ZTsKKworCS8qIExhc3QgbGluZSBp bnRlcnJ1cHQgZGlzYWJsZSAqLworCXJlZ21hcF93cml0ZShsY2RjLT5tZmQtPnJlZ21hcCwgQVRN RUxfTENEQ19JRFIsIEFUTUVMX0xDRENfTFNUTE5JKTsKK30KKworY29uc3Qgc3RydWN0IGRybV9z aW1wbGVfZGlzcGxheV9waXBlX2Z1bmNzIGxjZGNfZGlzcGxheV9mdW5jcyA9IHsKKwkuY2hlY2sg PSBsY2RjX3BpcGVfY2hlY2ssCisJLmVuYWJsZSA9IGxjZGNfcGlwZV9lbmFibGUsCisJLmRpc2Fi bGUgPSBsY2RjX3BpcGVfZGlzYWJsZSwKKwkudXBkYXRlID0gbGNkY19waXBlX3VwZGF0ZSwKKwku cHJlcGFyZV9mYiA9IGRybV9nZW1fZmJfc2ltcGxlX2Rpc3BsYXlfcGlwZV9wcmVwYXJlX2ZiLAor CS5lbmFibGVfdmJsYW5rID0gbGNkY19waXBlX2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJs YW5rID0gbGNkY19waXBlX2Rpc2FibGVfdmJsYW5rLAorfTsKKworc3RhdGljIGludCBsY2RjX2dl dF9vZl93aXJpbmcoc3RydWN0IGxjZGMgKmxjZGMsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgZGV2 aWNlX25vZGUgKmVwKQoreworCWNvbnN0IGNoYXIgKnN0cjsKKwlpbnQgcmV0OworCisJLy8gSEFD SworCWxjZGMtPndpcmluZ19yZXZlcnNlZCA9IHRydWU7CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9y ZWFkX3N0cmluZyhlcCwgIndpcmluZyIsICZzdHIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7 CisKKwlpZiAoc3RyY21wKHN0ciwgInJlZC1ncmVlbi1yZXZlcnNlZCIpID09IDApIHsKKwkJbGNk Yy0+d2lyaW5nX3JldmVyc2VkID0gdHJ1ZTsKKwl9IGVsc2UgaWYgKHN0cmNtcChzdHIsICJzdHJh aWdodCIpID09IDApIHsKKwkJLyogVXNlIGRlZmF1bHQgZm9ybWF0ICovCisJfSBlbHNlIHsKKwkJ RFJNX0RFVl9FUlJPUihsY2RjLT5kZXYsICJ1bmtub3duIFwid2lyaW5nXCIgcHJvcGVydHk6ICVz XG4iLAorCQkJICAgICAgc3RyKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgbGNkY19kaXNwbGF5X2luaXQoc3RydWN0IGxjZGMgKmxjZGMpCit7 CisJY29uc3QgdTMyICpmb3JtYXRzOworCXNpemVfdCBuZm9ybWF0czsKKwlpbnQgcmV0OworCisJ Zm9ybWF0cyA9IGdldF9mb3JtYXRzKGxjZGMtPndpcmluZ19yZXZlcnNlZCwgJm5mb3JtYXRzKTsK KworCXJldCA9IGRybV9zaW1wbGVfZGlzcGxheV9waXBlX2luaXQoJmxjZGMtPmRybSwgJmxjZGMt PnBpcGUsCisJCQkJCSAgICZsY2RjX2Rpc3BsYXlfZnVuY3MsCisJCQkJCSAgIGZvcm1hdHMsIG5m b3JtYXRzLAorCQkJCQkgICBOVUxMLCBOVUxMKTsKKwlpZiAocmV0IDwgMCkKKwkJRFJNX0RFVl9F UlJPUihsY2RjLT5kZXYsICJmYWlsZWQgdG8gaW5pdCBkaXNwbGF5IHBpcGU6ICVkXG4iLAorCQkJ ICAgICAgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbGNkY19hdHRhY2hf cGFuZWwoc3RydWN0IGxjZGMgKmxjZGMpCit7CisJc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZTsK KwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXN0 cnVjdCBkZXZpY2UgKmRldjsKKwlpbnQgcmV0OworCisJZGV2ID0gbGNkYy0+ZGV2OworCW5wID0g ZGV2LT5vZl9ub2RlOworCXJldCA9IGRybV9vZl9maW5kX3BhbmVsX29yX2JyaWRnZShucCwgMCwg MCwgJnBhbmVsLCBOVUxMKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmICgh cGFuZWwpIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJubyBwYW5lbCBmb3VuZFxuIik7CisJCXJl dHVybiAtRU5PREVWOworCX0KKworCWxjZGMtPnBhbmVsID0gcGFuZWw7CisJYnJpZGdlID0gZGV2 bV9kcm1fcGFuZWxfYnJpZGdlX2FkZChkZXYsIHBhbmVsLCBEUk1fTU9ERV9DT05ORUNUT1JfRFBJ KTsKKwlyZXQgPSBQVFJfRVJSX09SX1pFUk8oYnJpZGdlKTsKKwlpZiAocmV0IDwgMCkgeworCQlE Uk1fREVWX0VSUk9SKGRldiwgImZhaWxlZCB0byBhZGQgYnJpZGdlOiAlZFxuIiwgcmV0KTsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBsY2RjX2Rpc3BsYXlfaW5pdChsY2RjKTsKKwlpZiAo cmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGRybV9zaW1wbGVfZGlzcGxheV9waXBl X2F0dGFjaF9icmlkZ2UoJmxjZGMtPnBpcGUsIGJyaWRnZSk7CisJaWYgKHJldCA8IDApCisJCURS TV9ERVZfRVJST1IoZGV2LCAiZmFpbGVkIHRvIGF0dGFjaCBicmlkZ2U6ICVkXG4iLCByZXQpOwor CisJbGNkYy0+Y29ubmVjdG9yID0gcGFuZWwtPmNvbm5lY3RvcjsKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgaW50IGxjZGNfY3JlYXRlX291dHB1dChzdHJ1Y3QgbGNkYyAqbGNkYykKK3sKKwlz dHJ1Y3QgZGV2aWNlX25vZGUgKmVuZHBvaW50OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJ aW50IHJldDsKKworCS8qIHBvcnRAMC9lbmRwb2ludEAwIGlzIHRoZSBvbmx5IHBvcnQvZW5kcG9p bnQgKi8KKwlucCA9IGxjZGMtPmRldi0+b2Zfbm9kZTsKKwllbmRwb2ludCA9IG9mX2dyYXBoX2dl dF9lbmRwb2ludF9ieV9yZWdzKG5wLCAwLCAwKTsKKwlpZiAoIWVuZHBvaW50KSB7CisJCURSTV9E RVZfRVJST1IobGNkYy0+ZGV2LCAiZmFpbGVkIHRvIGZpbmQgZW5kcG9pbnQgbm9kZVxuIik7CisJ CXJldHVybiAtRU5PREVWOworCX0KKworCWxjZGNfZ2V0X29mX3dpcmluZyhsY2RjLCBlbmRwb2lu dCk7CisJb2Zfbm9kZV9wdXQoZW5kcG9pbnQpOworCisJcmV0ID0gbGNkY19hdHRhY2hfcGFuZWwo bGNkYyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9tb2Rl X2NvbmZpZ19mdW5jcyBtb2RlX2NvbmZpZ19mdW5jcyA9IHsKKwkuZmJfY3JlYXRlID0gZHJtX2dl bV9mYl9jcmVhdGUsCisJLmF0b21pY19jaGVjayA9IGRybV9hdG9taWNfaGVscGVyX2NoZWNrLAor CS5hdG9taWNfY29tbWl0ID0gZHJtX2F0b21pY19oZWxwZXJfY29tbWl0LAorfTsKKworaW50IGF0 bWVsX2xjZGNfbW9kZXNldF9pbml0KHN0cnVjdCBsY2RjICpsY2RjKQoreworCXN0cnVjdCBkcm1f ZGV2aWNlICpkcm07CisJc3RydWN0IGRldmljZSAqZGV2OworCWludCByZXQ7CisKKwlkcm0gPSAm bGNkYy0+ZHJtOworCWRldiA9IGRybS0+ZGV2OworCisJZHJtX21vZGVfY29uZmlnX2luaXQoZHJt KTsKKwlyZXQgPSBsY2RjX2NyZWF0ZV9vdXRwdXQobGNkYyk7CisKKwlpZiAocmV0KSB7CisJCWRy bV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7CisJCXJldHVybiByZXQ7CisJfQorCisJZHJtLT5t b2RlX2NvbmZpZy5taW5fd2lkdGggID0gMDsKKwlkcm0tPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQg PSAwOworCWRybS0+bW9kZV9jb25maWcubWF4X3dpZHRoICA9IGxjZGMtPmRlc2MtPm1heF93aWR0 aDsKKwlkcm0tPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSBsY2RjLT5kZXNjLT5tYXhfaGVpZ2h0 OworCWRybS0+bW9kZV9jb25maWcuZnVuY3MJICAgID0gJm1vZGVfY29uZmlnX2Z1bmNzOworCWRy bS0+bW9kZV9jb25maWcucXVpcmtfYWRkZmJfcmdiX3RvX2JnciA9ICFsY2RjLT53aXJpbmdfcmV2 ZXJzZWQ7CisKKwlkcm1fbW9kZV9jb25maWdfcmVzZXQoZHJtKTsKKworCXJldHVybiAwOworfQor CitpbnQgYXRtZWxfbGNkY192YmxhbmtfaW5pdChzdHJ1Y3QgbGNkYyAqbGNkYykKK3sKKwlpbnQg cmV0OworCisJcmV0ID0gZHJtX3ZibGFua19pbml0KCZsY2RjLT5kcm0sIDEpOworCWlmIChyZXQp CisJCURSTV9ERVZfRVJST1IobGNkYy0+ZGV2LCAidmJsYW5rIGluaXQgZmFpbGVkOiAlZFxuIiwg cmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgYXRtZWxfbGNkY192Ymxhbmsoc3RydWN0 IGxjZGMgKmxjZGMpCit7CisJZHJtX2NydGNfaGFuZGxlX3ZibGFuaygmbGNkYy0+cGlwZS5jcnRj KTsKK30KKworLyoKKyAqIFN0YXJ0IExDRCBDb250cm9sbGVyIChETUEgKyBQV1IpCisgKiBDYWxs ZXIgbXVzdCBob2xkIGVuYWJsZV9sb2NrCisgKi8KK3ZvaWQgYXRtZWxfbGNkY19zdGFydChzdHJ1 Y3QgbGNkYyAqbGNkYykKK3sKKwkvKiBFbmFibGUgRE1BICovCisJcmVnbWFwX3dyaXRlKGxjZGMt Pm1mZC0+cmVnbWFwLCBBVE1FTF9MQ0RDX0RNQUNPTiwgQVRNRUxfTENEQ19ETUFFTik7CisJLyog RW5hYmxlIExDRCAqLworCXJlZ21hcF93cml0ZShsY2RjLT5tZmQtPnJlZ21hcCwgQVRNRUxfTENE Q19QV1JDT04sCisJCSAgICAgKGxjZGMtPmRlc2MtPmd1YXJkX3RpbWUgPDwgQVRNRUxfTENEQ19H VUFSRFRfT0ZGU0VUKQorCQkgICAgIHwgQVRNRUxfTENEQ19QV1IpOworfQorCisvKgorICogU3Rv cCBMQ0QgQ29udHJvbGxlciAoUFdSICsgRE1BKQorICogQ2FsbGVyIG11c3QgaG9sZCBlbmFibGVf bG9jaworICovCit2b2lkIGF0bWVsX2xjZGNfc3RvcChzdHJ1Y3QgbGNkYyAqbGNkYykKK3sKKwl1 bnNpZ25lZCBpbnQgcHdyY29uOworCisJbWlnaHRfc2xlZXAoKTsKKworCS8qIFR1cm4gb2ZmIHRo ZSBMQ0QgY29udHJvbGxlciBhbmQgdGhlIERNQSBjb250cm9sbGVyICovCisJcmVnbWFwX3dyaXRl KGxjZGMtPm1mZC0+cmVnbWFwLCBBVE1FTF9MQ0RDX1BXUkNPTiwKKwkJCWxjZGMtPmRlc2MtPmd1 YXJkX3RpbWUgPDwgQVRNRUxfTENEQ19HVUFSRFRfT0ZGU0VUKTsKKworCXJlZ21hcF93cml0ZShs Y2RjLT5tZmQtPnJlZ21hcCwgQVRNRUxfTENEQ19ETUFDT04sICEoQVRNRUxfTENEQ19ETUFFTikp OworCisJLyogV2FpdCBmb3IgdGhlIExDREMgY29yZSB0byBiZWNvbWUgaWRsZSAqLworCXJlZ21h cF9yZWFkX3BvbGxfdGltZW91dChsY2RjLT5tZmQtPnJlZ21hcCwgQVRNRUxfTENEQ19QV1JDT04s IHB3cmNvbiwKKwkJCQkgIShwd3Jjb24gJiBBVE1FTF9MQ0RDX0JVU1kpLCAxMDAsIDEwMDAwKTsK K30KLS0gCjIuMjAuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRl dmVs