From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Anholt Subject: [PATCH 2/2 v2] drm/vc4: Add DSI driver Date: Tue, 31 Jan 2017 11:29:12 -0800 Message-ID: <20170131192912.11316-2-eric@anholt.net> References: <20170124003853.16418-3-eric@anholt.net> <20170131192912.11316-1-eric@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from anholt.net (anholt.net [50.246.234.109]) by gabe.freedesktop.org (Postfix) with ESMTP id C59556E2A6 for ; Tue, 31 Jan 2017 19:29:26 +0000 (UTC) In-Reply-To: <20170131192912.11316-1-eric@anholt.net> 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, Stephen Boyd , Michael Turquette Cc: linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org VGhlIERTSTAgYW5kIERTSTEgYmxvY2tzIG9uIHRoZSAyODM1IGFyZSByZWxhdGVkIGhhcmR3YXJl IGJsb2Nrcy4KU29tZSByZWdpc3RlcnMgbW92ZSBhcm91bmQsIGFuZCB0aGUgZmVhdHVyZXNldCBp cyBzbGlnaHRseSBkaWZmZXJlbnQsCmFzIERTSTEgKHRoZSA0LWxhbmUgRFNJKSBpcyBhIGxhdGVy IHZlcnNpb24gb2YgdGhlIGhhcmR3YXJlIGJsb2NrLgpUaGlzIGRyaXZlciBkb2Vzbid0IHlldCBl bmFibGUgRFNJMCwgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnkgaGFyZHdhcmUKdG8gdGVzdCBhZ2Fp bnN0LCBidXQgaXQgZG9lcyBwdXQgYSBsb3Qgb2YgdGhlIHJlZ2lzdGVyIGRlZmluaXRpb25zIGFu ZApjb2RlIGluIHBsYWNlLgoKdjI6IFVzZSB0aGUgY2xrX2h3IGludGVyZmFjZXMsIGRvbid0IHNl dCBDTEtfSVNfQkFTSUMgKGZyb20gcmV2aWV3IGJ5CiAgICBTdGVwaGVuIEJveWQpCgpTaWduZWQt b2ZmLWJ5OiBFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgotLS0KIGRyaXZlcnMvZ3B1L2Ry bS92YzQvS2NvbmZpZyAgICAgICB8ICAgIDIgKwogZHJpdmVycy9ncHUvZHJtL3ZjNC9NYWtlZmls ZSAgICAgIHwgICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kZWJ1Z2ZzLmMgfCAgICAx ICsKIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5jICAgICB8ICAgIDEgKwogZHJpdmVycy9n cHUvZHJtL3ZjNC92YzRfZHJ2LmggICAgIHwgICAgNSArCiBkcml2ZXJzL2dwdS9kcm0vdmM0L3Zj NF9kc2kuYyAgICAgfCAxNzI1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IDYgZmlsZXMgY2hhbmdlZCwgMTczNSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHNpLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vdmM0L0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L0tjb25maWcKaW5kZXggZTUzZGY1 OWNiMTM5Li5lMTUxN2QwN2NiN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92YzQvS2Nv bmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L0tjb25maWcKQEAgLTIsMTAgKzIsMTIgQEAg Y29uZmlnIERSTV9WQzQKIAl0cmlzdGF0ZSAiQnJvYWRjb20gVkM0IEdyYXBoaWNzIgogCWRlcGVu ZHMgb24gQVJDSF9CQ00yODM1IHx8IENPTVBJTEVfVEVTVAogCWRlcGVuZHMgb24gRFJNCisJZGVw ZW5kcyBvbiBDT01NT05fQ0xLCiAJc2VsZWN0IERSTV9LTVNfSEVMUEVSCiAJc2VsZWN0IERSTV9L TVNfQ01BX0hFTFBFUgogCXNlbGVjdCBEUk1fR0VNX0NNQV9IRUxQRVIKIAlzZWxlY3QgRFJNX1BB TkVMCisJc2VsZWN0IERSTV9NSVBJX0RTSQogCWhlbHAKIAkgIENob29zZSB0aGlzIG9wdGlvbiBp ZiB5b3UgaGF2ZSBhIHN5c3RlbSB0aGF0IGhhcyBhIEJyb2FkY29tCiAJICBWQzQgR1BVLCBzdWNo IGFzIHRoZSBSYXNwYmVycnkgUGkgb3Igb3RoZXIgQkNNMjcwOC9CQ00yODM1LgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS92YzQvTWFr ZWZpbGUKaW5kZXggNzc1N2Y2OWE4YTc3Li42MWY0NWQxMjJiZDAgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS92YzQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC9NYWtlZmls ZQpAQCAtOCw2ICs4LDcgQEAgdmM0LXkgOj0gXAogCXZjNF9jcnRjLm8gXAogCXZjNF9kcnYubyBc CiAJdmM0X2RwaS5vIFwKKwl2YzRfZHNpLm8gXAogCXZjNF9rbXMubyBcCiAJdmM0X2dlbS5vIFwK IAl2YzRfaGRtaS5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2RlYnVn ZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2RlYnVnZnMuYwppbmRleCBjYWY4MTdiYWM4 ODUuLjNjYTQ3NmM2ZTA1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZGVi dWdmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2RlYnVnZnMuYwpAQCAtMTgsNiAr MTgsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1faW5mb19saXN0IHZjNF9kZWJ1Z2ZzX2xp c3RbXSA9IHsKIAl7ImJvX3N0YXRzIiwgdmM0X2JvX3N0YXRzX2RlYnVnZnMsIDB9LAogCXsiZHBp X3JlZ3MiLCB2YzRfZHBpX2RlYnVnZnNfcmVncywgMH0sCisJeyJkc2kxX3JlZ3MiLCB2YzRfZHNp X2RlYnVnZnNfcmVncywgMCwgKHZvaWQgKikodWludHB0cl90KTF9LAogCXsiaGRtaV9yZWdzIiwg dmM0X2hkbWlfZGVidWdmc19yZWdzLCAwfSwKIAl7InZlY19yZWdzIiwgdmM0X3ZlY19kZWJ1Z2Zz X3JlZ3MsIDB9LAogCXsiaHZzX3JlZ3MiLCB2YzRfaHZzX2RlYnVnZnNfcmVncywgMH0sCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS92 YzQvdmM0X2Rydi5jCmluZGV4IGFjMDljYTdmZjQzMC4uMDg0NGM4MzJhNGM0IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0 L3ZjNF9kcnYuYwpAQCAtMjk2LDYgKzI5Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJp dmVyICpjb25zdCBjb21wb25lbnRfZHJpdmVyc1tdID0gewogCSZ2YzRfaGRtaV9kcml2ZXIsCiAJ JnZjNF92ZWNfZHJpdmVyLAogCSZ2YzRfZHBpX2RyaXZlciwKKwkmdmM0X2RzaV9kcml2ZXIsCiAJ JnZjNF9odnNfZHJpdmVyLAogCSZ2YzRfY3J0Y19kcml2ZXIsCiAJJnZjNF92M2RfZHJpdmVyLApk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmggYi9kcml2ZXJzL2dwdS9k cm0vdmM0L3ZjNF9kcnYuaAppbmRleCBiNWM0YmIxNGQwZDEuLjcyM2YwZWM5NDBhYyAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L3ZjNC92YzRfZHJ2LmgKQEAgLTE3LDYgKzE3LDcgQEAgc3RydWN0IHZjNF9kZXYgewogCXN0cnVj dCB2YzRfY3J0YyAqY3J0Y1szXTsKIAlzdHJ1Y3QgdmM0X3YzZCAqdjNkOwogCXN0cnVjdCB2YzRf ZHBpICpkcGk7CisJc3RydWN0IHZjNF9kc2kgKmRzaTE7CiAJc3RydWN0IHZjNF92ZWMgKnZlYzsK IAogCXN0cnVjdCBkcm1fZmJkZXZfY21hICpmYmRldjsKQEAgLTQ2NSw2ICs0NjYsMTAgQEAgdm9p ZCBfX2lvbWVtICp2YzRfaW9yZW1hcF9yZWdzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwg aW50IGluZGV4KTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZjNF9kcGlfZHJpdmVy OwogaW50IHZjNF9kcGlfZGVidWdmc19yZWdzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51 c2VkKTsKIAorLyogdmM0X2RzaS5jICovCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2 YzRfZHNpX2RyaXZlcjsKK2ludCB2YzRfZHNpX2RlYnVnZnNfcmVncyhzdHJ1Y3Qgc2VxX2ZpbGUg Km0sIHZvaWQgKnVudXNlZCk7CisKIC8qIHZjNF9nZW0uYyAqLwogdm9pZCB2YzRfZ2VtX2luaXQo c3RydWN0IGRybV9kZXZpY2UgKmRldik7CiB2b2lkIHZjNF9nZW1fZGVzdHJveShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2RzaS5j IGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi4yNzM2YjAzMzFiZWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vdmM0L3ZjNF9kc2kuYwpAQCAtMCwwICsxLDE3MjUgQEAKKy8qCisgKiBDb3B5cmln aHQgKEMpIDIwMTYgQnJvYWRjb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVi bGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBt b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFt LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKy8q KgorICogRE9DOiBWQzQgRFNJMC9EU0kxIG1vZHVsZQorICoKKyAqIEJDTTI4MzUgY29udGFpbnMg dHdvIERTSSBtb2R1bGVzLCBEU0kwIGFuZCBEU0kxLiAgRFNJMCBpcyBhCisgKiBzaW5nbGUtbGFu ZSBEU0kgY29udHJvbGxlciwgd2hpbGUgRFNJMSBpcyBhIG1vcmUgbW9kZXJuIDQtbGFuZSBEU0kK KyAqIGNvbnRyb2xsZXIuCisgKgorICogTW9zdCBSYXNwYmVycnkgUGkgYm9hcmRzIGV4cG9zZSBE U0kxIGFzIHRoZWlyICJESVNQTEFZIiBjb25uZWN0b3IsCisgKiB3aGlsZSB0aGUgY29tcHV0ZSBt b2R1bGUgYnJpbmdzIGJvdGggRFNJMCBhbmQgRFNJMSBvdXQuCisgKgorICogVGhpcyBkcml2ZXIg aGFzIGJlZW4gdGVzdGVkIGZvciBEU0kxIHZpZGVvLW1vZGUgZGlzcGxheSBvbmx5CisgKiBjdXJy ZW50bHksIHdpdGggbW9zdCBvZiB0aGUgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciBEU0kwCisg KiBob3BlZnVsbHkgcHJlc2VudC4KKyAqLworCisjaW5jbHVkZSAiZHJtX2F0b21pY19oZWxwZXIu aCIKKyNpbmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKKyNpbmNsdWRlICJkcm1fZWRpZC5oIgor I2luY2x1ZGUgImRybV9taXBpX2RzaS5oIgorI2luY2x1ZGUgImRybV9wYW5lbC5oIgorI2luY2x1 ZGUgImxpbnV4L2Nsay5oIgorI2luY2x1ZGUgImxpbnV4L2Nsay1wcm92aWRlci5oIgorI2luY2x1 ZGUgImxpbnV4L2NvbXBsZXRpb24uaCIKKyNpbmNsdWRlICJsaW51eC9jb21wb25lbnQuaCIKKyNp bmNsdWRlICJsaW51eC9kbWFlbmdpbmUuaCIKKyNpbmNsdWRlICJsaW51eC9pMmMuaCIKKyNpbmNs dWRlICJsaW51eC9vZl9hZGRyZXNzLmgiCisjaW5jbHVkZSAibGludXgvb2ZfcGxhdGZvcm0uaCIK KyNpbmNsdWRlICJsaW51eC9wbV9ydW50aW1lLmgiCisjaW5jbHVkZSAidmM0X2Rydi5oIgorI2lu Y2x1ZGUgInZjNF9yZWdzLmgiCisKKyNkZWZpbmUgRFNJX0NNRF9GSUZPX0RFUFRIICAxNgorI2Rl ZmluZSBEU0lfUElYX0ZJRk9fREVQVEggMjU2CisjZGVmaW5lIERTSV9QSVhfRklGT19XSURUSCAg IDQKKworI2RlZmluZSBEU0kwX0NUUkwJCTB4MDAKKworLyogQ29tbWFuZCBwYWNrZXQgY29udHJv bC4gKi8KKyNkZWZpbmUgRFNJMF9UWFBLVDFDCQkweDA0IC8qIEFLQSBQS1RDICovCisjZGVmaW5l IERTSTFfVFhQS1QxQwkJMHgwNAorIyBkZWZpbmUgRFNJX1RYUEtUMUNfVFJJR19DTURfTUFTSwlW QzRfTUFTSygzMSwgMjQpCisjIGRlZmluZSBEU0lfVFhQS1QxQ19UUklHX0NNRF9TSElGVAkyNAor IyBkZWZpbmUgRFNJX1RYUEtUMUNfQ01EX1JFUEVBVF9NQVNLCVZDNF9NQVNLKDIzLCAxMCkKKyMg ZGVmaW5lIERTSV9UWFBLVDFDX0NNRF9SRVBFQVRfU0hJRlQJMTAKKworIyBkZWZpbmUgRFNJX1RY UEtUMUNfRElTUExBWV9OT19NQVNLCVZDNF9NQVNLKDksIDgpCisjIGRlZmluZSBEU0lfVFhQS1Qx Q19ESVNQTEFZX05PX1NISUZUCTgKKy8qIFNob3J0LCB0cmlnZ2VyLCBCVEEsIG9yIGEgbG9uZyBw YWNrZXQgdGhhdCBmaXRzIGFsbCBpbiBDTURGSUZPLiAqLworIyBkZWZpbmUgRFNJX1RYUEtUMUNf RElTUExBWV9OT19TSE9SVAkJMAorLyogUHJpbWFyeSBkaXNwbGF5IHdoZXJlIGNtZGZpZm8gcHJv dmlkZXMgcGFydCBvZiB0aGUgcGF5bG9hZCBhbmQKKyAqIHBpeGVsdmFsdmUgdGhlIHJlc3QuCisg Ki8KKyMgZGVmaW5lIERTSV9UWFBLVDFDX0RJU1BMQVlfTk9fUFJJTUFSWQkJMQorLyogU2Vjb25k YXJ5IGRpc3BsYXkgd2hlcmUgY21kZmlmbyBwcm92aWRlcyBwYXJ0IG9mIHRoZSBwYXlsb2FkIGFu ZAorICogcGl4ZmlmbyB0aGUgcmVzdC4KKyAqLworIyBkZWZpbmUgRFNJX1RYUEtUMUNfRElTUExB WV9OT19TRUNPTkRBUlkJMgorCisjIGRlZmluZSBEU0lfVFhQS1QxQ19DTURfVFhfVElNRV9NQVNL CVZDNF9NQVNLKDcsIDYpCisjIGRlZmluZSBEU0lfVFhQS1QxQ19DTURfVFhfVElNRV9TSElGVAk2 CisKKyMgZGVmaW5lIERTSV9UWFBLVDFDX0NNRF9DVFJMX01BU0sJVkM0X01BU0soNSwgNCkKKyMg ZGVmaW5lIERTSV9UWFBLVDFDX0NNRF9DVFJMX1NISUZUCTQKKy8qIENvbW1hbmQgb25seS4gIFVz ZXMgVFhQS1QxSCBhbmQgRElTUExBWV9OTyAqLworIyBkZWZpbmUgRFNJX1RYUEtUMUNfQ01EX0NU UkxfVFgJMAorLyogQ29tbWFuZCB3aXRoIEJUQSBmb3IgZWl0aGVyIGFjayBvciByZWFkIGRhdGEu ICovCisjIGRlZmluZSBEU0lfVFhQS1QxQ19DTURfQ1RSTF9SWAkxCisvKiBUcmlnZ2VyIGFjY29y ZGluZyB0byBUUklHX0NNRCAqLworIyBkZWZpbmUgRFNJX1RYUEtUMUNfQ01EX0NUUkxfVFJJRwky CisvKiBCVEEgYWxvbmUgZm9yIGdldHRpbmcgZXJyb3Igc3RhdHVzIGFmdGVyIGEgY29tbWFuZCwg b3IgYSBURSB0cmlnZ2VyCisgKiB3aXRob3V0IGEgcHJldmlvdXMgY29tbWFuZC4KKyAqLworIyBk ZWZpbmUgRFNJX1RYUEtUMUNfQ01EX0NUUkxfQlRBCTMKKworIyBkZWZpbmUgRFNJX1RYUEtUMUNf Q01EX01PREVfTFAJQklUKDMpCisjIGRlZmluZSBEU0lfVFhQS1QxQ19DTURfVFlQRV9MT05HCUJJ VCgyKQorIyBkZWZpbmUgRFNJX1RYUEtUMUNfQ01EX1RFX0VOCQlCSVQoMSkKKyMgZGVmaW5lIERT SV9UWFBLVDFDX0NNRF9FTgkJQklUKDApCisKKy8qIENvbW1hbmQgcGFja2V0IGhlYWRlci4gKi8K KyNkZWZpbmUgRFNJMF9UWFBLVDFICQkweDA4IC8qIEFLQSBQS1RIICovCisjZGVmaW5lIERTSTFf VFhQS1QxSAkJMHgwOAorIyBkZWZpbmUgRFNJX1RYUEtUMUhfQkNfQ01ERklGT19NQVNLCVZDNF9N QVNLKDMxLCAyNCkKKyMgZGVmaW5lIERTSV9UWFBLVDFIX0JDX0NNREZJRk9fU0hJRlQJMjQKKyMg ZGVmaW5lIERTSV9UWFBLVDFIX0JDX1BBUkFNX01BU0sJVkM0X01BU0soMjMsIDgpCisjIGRlZmlu ZSBEU0lfVFhQS1QxSF9CQ19QQVJBTV9TSElGVAk4CisjIGRlZmluZSBEU0lfVFhQS1QxSF9CQ19E VF9NQVNLCQlWQzRfTUFTSyg3LCAwKQorIyBkZWZpbmUgRFNJX1RYUEtUMUhfQkNfRFRfU0hJRlQJ MAorCisjZGVmaW5lIERTSTBfUlhQS1QxSAkJMHgwYyAvKiBBS0EgUlgxX1BLVEggKi8KKyNkZWZp bmUgRFNJMV9SWFBLVDFICQkweDE0CisjIGRlZmluZSBEU0lfUlhQS1QxSF9DUkNfRVJSCQlCSVQo MzEpCisjIGRlZmluZSBEU0lfUlhQS1QxSF9ERVRfRVJSCQlCSVQoMzApCisjIGRlZmluZSBEU0lf UlhQS1QxSF9FQ0NfRVJSCQlCSVQoMjkpCisjIGRlZmluZSBEU0lfUlhQS1QxSF9DT1JfRVJSCQlC SVQoMjgpCisjIGRlZmluZSBEU0lfUlhQS1QxSF9JTkNPTVBfUEtUCQlCSVQoMjUpCisjIGRlZmlu ZSBEU0lfUlhQS1QxSF9QS1RfVFlQRV9MT05HCUJJVCgyNCkKKy8qIEJ5dGUgY291bnQgaWYgRFNJ X1JYUEtUMUhfUEtUX1RZUEVfTE9ORyAqLworIyBkZWZpbmUgRFNJX1JYUEtUMUhfQkNfUEFSQU1f TUFTSwlWQzRfTUFTSygyMywgOCkKKyMgZGVmaW5lIERTSV9SWFBLVDFIX0JDX1BBUkFNX1NISUZU CTgKKy8qIFNob3J0IHJldHVybiBieXRlcyBpZiAhRFNJX1JYUEtUMUhfUEtUX1RZUEVfTE9ORyAq LworIyBkZWZpbmUgRFNJX1JYUEtUMUhfU0hPUlRfMV9NQVNLCVZDNF9NQVNLKDIzLCAxNikKKyMg ZGVmaW5lIERTSV9SWFBLVDFIX1NIT1JUXzFfU0hJRlQJMTYKKyMgZGVmaW5lIERTSV9SWFBLVDFI X1NIT1JUXzBfTUFTSwlWQzRfTUFTSygxNSwgOCkKKyMgZGVmaW5lIERTSV9SWFBLVDFIX1NIT1JU XzBfU0hJRlQJOAorIyBkZWZpbmUgRFNJX1JYUEtUMUhfRFRfTFBfQ01EX01BU0sJVkM0X01BU0so NywgMCkKKyMgZGVmaW5lIERTSV9SWFBLVDFIX0RUX0xQX0NNRF9TSElGVAkwCisKKyNkZWZpbmUg RFNJMF9SWFBLVDJICQkweDEwIC8qIEFLQSBSWDJfUEtUSCAqLworI2RlZmluZSBEU0kxX1JYUEtU MkgJCTB4MTgKKyMgZGVmaW5lIERTSV9SWFBLVDFIX0RFVF9FUlIJCUJJVCgzMCkKKyMgZGVmaW5l IERTSV9SWFBLVDFIX0VDQ19FUlIJCUJJVCgyOSkKKyMgZGVmaW5lIERTSV9SWFBLVDFIX0NPUl9F UlIJCUJJVCgyOCkKKyMgZGVmaW5lIERTSV9SWFBLVDFIX0lOQ09NUF9QS1QJCUJJVCgyNSkKKyMg ZGVmaW5lIERTSV9SWFBLVDFIX0JDX1BBUkFNX01BU0sJVkM0X01BU0soMjMsIDgpCisjIGRlZmlu ZSBEU0lfUlhQS1QxSF9CQ19QQVJBTV9TSElGVAk4CisjIGRlZmluZSBEU0lfUlhQS1QxSF9EVF9N QVNLCQlWQzRfTUFTSyg3LCAwKQorIyBkZWZpbmUgRFNJX1JYUEtUMUhfRFRfU0hJRlQJCTAKKwor I2RlZmluZSBEU0kwX1RYUEtUX0NNRF9GSUZPCTB4MTQgLyogQUtBIENNRF9EQVRBRiAqLworI2Rl ZmluZSBEU0kxX1RYUEtUX0NNRF9GSUZPCTB4MWMKKworI2RlZmluZSBEU0kwX0RJU1AwX0NUUkwJ CTB4MTgKKyMgZGVmaW5lIERTSV9ESVNQMF9QSVhfQ0xLX0RJVl9NQVNLCVZDNF9NQVNLKDIxLCAx MykKKyMgZGVmaW5lIERTSV9ESVNQMF9QSVhfQ0xLX0RJVl9TSElGVAkxMworIyBkZWZpbmUgRFNJ X0RJU1AwX0xQX1NUT1BfQ1RSTF9NQVNLCVZDNF9NQVNLKDEyLCAxMSkKKyMgZGVmaW5lIERTSV9E SVNQMF9MUF9TVE9QX0NUUkxfU0hJRlQJMTEKKyMgZGVmaW5lIERTSV9ESVNQMF9MUF9TVE9QX0RJ U0FCTEUJMAorIyBkZWZpbmUgRFNJX0RJU1AwX0xQX1NUT1BfUEVSTElORQkxCisjIGRlZmluZSBE U0lfRElTUDBfTFBfU1RPUF9QRVJGUkFNRQkyCisKKy8qIFRyYW5zbWl0IFJHQiBwaXhlbHMgYW5k IG51bGwgcGFja2V0cyBvbmx5IGR1cmluZyBIQUNUSVZFLCBpbnN0ZWFkCisgKiBvZiBnb2luZyB0 byBMUC1TVE9QLgorICovCisjIGRlZmluZSBEU0lfRElTUF9IQUNUSVZFX05VTEwJCUJJVCgxMCkK Ky8qIFRyYW5zbWl0IGJsYW5raW5nIHBhY2tldCBvbmx5IGR1cmluZyB2YmxhbmssIGluc3RlYWQg b2YgYWxsb3dpbmcgTFAtU1RPUC4gKi8KKyMgZGVmaW5lIERTSV9ESVNQX1ZCTFBfQ1RSTAkJQklU KDkpCisvKiBUcmFuc21pdCBibGFua2luZyBwYWNrZXQgb25seSBkdXJpbmcgSEZQLCBpbnN0ZWFk IG9mIGFsbG93aW5nIExQLVNUT1AuICovCisjIGRlZmluZSBEU0lfRElTUF9IRlBfQ1RSTAkJQklU KDgpCisvKiBUcmFuc21pdCBibGFua2luZyBwYWNrZXQgb25seSBkdXJpbmcgSEJQLCBpbnN0ZWFk IG9mIGFsbG93aW5nIExQLVNUT1AuICovCisjIGRlZmluZSBEU0lfRElTUF9IQlBfQ1RSTAkJQklU KDcpCisjIGRlZmluZSBEU0lfRElTUDBfQ0hBTk5FTF9NQVNLCQlWQzRfTUFTSyg2LCA1KQorIyBk ZWZpbmUgRFNJX0RJU1AwX0NIQU5ORUxfU0hJRlQJNQorLyogRW5hYmxlcyBlbmQgZXZlbnRzIGZv ciBIU1lOQy9WU1lOQywgbm90IGp1c3Qgc3RhcnQgZXZlbnRzLiAqLworIyBkZWZpbmUgRFNJX0RJ U1AwX1NUX0VORAkJQklUKDQpCisjIGRlZmluZSBEU0lfRElTUDBfUEZPUk1BVF9NQVNLCQlWQzRf TUFTSygzLCAyKQorIyBkZWZpbmUgRFNJX0RJU1AwX1BGT1JNQVRfU0hJRlQJMgorIyBkZWZpbmUg RFNJX1BGT1JNQVRfUkdCNTY1CQkwCisjIGRlZmluZSBEU0lfUEZPUk1BVF9SR0I2NjZfUEFDS0VE CTEKKyMgZGVmaW5lIERTSV9QRk9STUFUX1JHQjY2NgkJMgorIyBkZWZpbmUgRFNJX1BGT1JNQVRf UkdCODg4CQkzCisvKiBEZWZhdWx0IGlzIFZJREVPIG1vZGUuICovCisjIGRlZmluZSBEU0lfRElT UDBfQ09NTUFORF9NT0RFCQlCSVQoMSkKKyMgZGVmaW5lIERTSV9ESVNQMF9FTkFCTEUJCUJJVCgw KQorCisjZGVmaW5lIERTSTBfRElTUDFfQ1RSTAkJMHgxYworI2RlZmluZSBEU0kxX0RJU1AxX0NU UkwJCTB4MmMKKy8qIEZvcm1hdCBvZiB0aGUgZGF0YSB3cml0dGVuIHRvIFRYUEtUX1BJWF9GSUZP LiAqLworIyBkZWZpbmUgRFNJX0RJU1AxX1BGT1JNQVRfTUFTSwkJVkM0X01BU0soMiwgMSkKKyMg ZGVmaW5lIERTSV9ESVNQMV9QRk9STUFUX1NISUZUCTEKKyMgZGVmaW5lIERTSV9ESVNQMV9QRk9S TUFUXzE2QklUCTAKKyMgZGVmaW5lIERTSV9ESVNQMV9QRk9STUFUXzI0QklUCTEKKyMgZGVmaW5l IERTSV9ESVNQMV9QRk9STUFUXzMyQklUX0xFCTIKKyMgZGVmaW5lIERTSV9ESVNQMV9QRk9STUFU XzMyQklUX0JFCTMKKworLyogRElTUDEgaXMgYWx3YXlzIGNvbW1hbmQgbW9kZS4gKi8KKyMgZGVm aW5lIERTSV9ESVNQMV9FTkFCTEUJCUJJVCgwKQorCisjZGVmaW5lIERTSTBfVFhQS1RfUElYX0ZJ Rk8JCTB4MjAgLyogQUtBIFBJWF9GSUZPICovCisKKyNkZWZpbmUgRFNJMF9JTlRfU1RBVAkJMHgy NAorI2RlZmluZSBEU0kwX0lOVF9FTgkJMHgyOAorIyBkZWZpbmUgRFNJMV9JTlRfUEhZX0QzX1VM UFMJCUJJVCgzMCkKKyMgZGVmaW5lIERTSTFfSU5UX1BIWV9EM19TVE9QCQlCSVQoMjkpCisjIGRl ZmluZSBEU0kxX0lOVF9QSFlfRDJfVUxQUwkJQklUKDI4KQorIyBkZWZpbmUgRFNJMV9JTlRfUEhZ X0QyX1NUT1AJCUJJVCgyNykKKyMgZGVmaW5lIERTSTFfSU5UX1BIWV9EMV9VTFBTCQlCSVQoMjYp CisjIGRlZmluZSBEU0kxX0lOVF9QSFlfRDFfU1RPUAkJQklUKDI1KQorIyBkZWZpbmUgRFNJMV9J TlRfUEhZX0QwX1VMUFMJCUJJVCgyNCkKKyMgZGVmaW5lIERTSTFfSU5UX1BIWV9EMF9TVE9QCQlC SVQoMjMpCisjIGRlZmluZSBEU0kxX0lOVF9GSUZPX0VSUgkJQklUKDIyKQorIyBkZWZpbmUgRFNJ MV9JTlRfUEhZX0RJUl9SVEYJCUJJVCgyMSkKKyMgZGVmaW5lIERTSTFfSU5UX1BIWV9SWExQRFQJ CUJJVCgyMCkKKyMgZGVmaW5lIERTSTFfSU5UX1BIWV9SWFRSSUcJCUJJVCgxOSkKKyMgZGVmaW5l IERTSTFfSU5UX1BIWV9EMF9MUERUCQlCSVQoMTgpCisjIGRlZmluZSBEU0kxX0lOVF9QSFlfRElS X0ZUUgkJQklUKDE3KQorCisvKiBTaWduYWxlZCB3aGVuIHRoZSBjbG9jayBsYW5lIGVudGVycyB0 aGUgZ2l2ZW4gc3RhdGUuICovCisjIGRlZmluZSBEU0kxX0lOVF9QSFlfQ0xPQ0tfVUxQUwlCSVQo MTYpCisjIGRlZmluZSBEU0kxX0lOVF9QSFlfQ0xPQ0tfSFMJCUJJVCgxNSkKKyMgZGVmaW5lIERT STFfSU5UX1BIWV9DTE9DS19TVE9QCUJJVCgxNCkKKworLyogU2lnbmFsZWQgb24gdGltZW91dHMg Ki8KKyMgZGVmaW5lIERTSTFfSU5UX1BSX1RPCQkJQklUKDEzKQorIyBkZWZpbmUgRFNJMV9JTlRf VEFfVE8JCQlCSVQoMTIpCisjIGRlZmluZSBEU0kxX0lOVF9MUFJYX1RPCQlCSVQoMTEpCisjIGRl ZmluZSBEU0kxX0lOVF9IU1RYX1RPCQlCSVQoMTApCisKKy8qIENvbnRlbnRpb24gb24gYSBsaW5l IHdoZW4gdHJ5aW5nIHRvIGRyaXZlIHRoZSBsaW5lIGxvdyAqLworIyBkZWZpbmUgRFNJMV9JTlRf RVJSX0NPTlRfTFAxCQlCSVQoOSkKKyMgZGVmaW5lIERTSTFfSU5UX0VSUl9DT05UX0xQMAkJQklU KDgpCisKKy8qIENvbnRyb2wgZXJyb3I6IGluY29ycmVjdCBsaW5lIHN0YXRlIHNlcXVlbmNlIG9u IGRhdGEgbGFuZSAwLiAqLworIyBkZWZpbmUgRFNJMV9JTlRfRVJSX0NPTlRST0wJCUJJVCg3KQor LyogTFBEVCBzeW5jaHJvbml6YXRpb24gZXJyb3IgKGJpdHMgcmVjZWl2ZWQgbm90IGEgbXVsdGlw bGUgb2YgOC4gKi8KKworIyBkZWZpbmUgRFNJMV9JTlRfRVJSX1NZTkNfRVNDCQlCSVQoNikKKy8q IFNpZ25hbGVkIGFmdGVyIHJlY2VpdmluZyBhbiBlcnJvciBwYWNrZXQgZnJvbSB0aGUgZGlzcGxh eSBpbgorICogcmVzcG9uc2UgdG8gYSByZWFkLgorICovCisjIGRlZmluZSBEU0kxX0lOVF9SWFBL VDIJCUJJVCg1KQorLyogU2lnbmFsZWQgYWZ0ZXIgcmVjZWl2aW5nIGEgcGFja2V0LiAgVGhlIGhl YWRlciBhbmQgb3B0aW9uYWwgc2hvcnQKKyAqIHJlc3BvbnNlIHdpbGwgYmUgaW4gUlhQS1QxSCwg YW5kIGEgbG9uZyByZXNwb25zZSB3aWxsIGJlIGluIHRoZQorICogUlhQS1RfRklGTy4KKyAqLwor IyBkZWZpbmUgRFNJMV9JTlRfUlhQS1QxCQlCSVQoNCkKKyMgZGVmaW5lIERTSTFfSU5UX1RYUEtU Ml9ET05FCQlCSVQoMykKKyMgZGVmaW5lIERTSTFfSU5UX1RYUEtUMl9FTkQJCUJJVCgyKQorLyog U2lnbmFsZWQgYWZ0ZXIgYWxsIHJlcGVhdHMgb2YgVFhQS1QxIGFyZSB0cmFuc2ZlcnJlZC4gKi8K KyMgZGVmaW5lIERTSTFfSU5UX1RYUEtUMV9ET05FCQlCSVQoMSkKKy8qIFNpZ25hbGVkIGFmdGVy IGVhY2ggVFhQS1QxIHJlcGVhdCBpcyBzY2hlZHVsZWQuICovCisjIGRlZmluZSBEU0kxX0lOVF9U WFBLVDFfRU5ECQlCSVQoMCkKKworI2RlZmluZSBEU0kxX0lOVEVSUlVQVFNfQUxXQVlTX0VOQUJM RUQJKERTSTFfSU5UX0VSUl9TWU5DX0VTQyB8IFwKKwkJCQkJIERTSTFfSU5UX0VSUl9DT05UUk9M IHwJIFwKKwkJCQkJIERTSTFfSU5UX0VSUl9DT05UX0xQMCB8IFwKKwkJCQkJIERTSTFfSU5UX0VS Ul9DT05UX0xQMSB8IFwKKwkJCQkJIERTSTFfSU5UX0hTVFhfVE8gfAkgXAorCQkJCQkgRFNJMV9J TlRfTFBSWF9UTyB8CSBcCisJCQkJCSBEU0kxX0lOVF9UQV9UTyB8CSBcCisJCQkJCSBEU0kxX0lO VF9QUl9UTykKKworI2RlZmluZSBEU0kwX1NUQVQJCTB4MmMKKyNkZWZpbmUgRFNJMF9IU1RYX1RP X0NOVAkweDMwCisjZGVmaW5lIERTSTBfTFBSWF9UT19DTlQJMHgzNAorI2RlZmluZSBEU0kwX1RB X1RPX0NOVAkJMHgzOAorI2RlZmluZSBEU0kwX1BSX1RPX0NOVAkJMHgzYworI2RlZmluZSBEU0kw X1BIWUMJCTB4NDAKKyMgZGVmaW5lIERTSTFfUEhZQ19FU0NfQ0xLX0xQRFRfTUFTSwlWQzRfTUFT SygyNSwgMjApCisjIGRlZmluZSBEU0kxX1BIWUNfRVNDX0NMS19MUERUX1NISUZUCTIwCisjIGRl ZmluZSBEU0kxX1BIWUNfSFNfQ0xLX0NPTlRJTlVPVVMJQklUKDE4KQorIyBkZWZpbmUgRFNJMF9Q SFlDX0VTQ19DTEtfTFBEVF9NQVNLCVZDNF9NQVNLKDE3LCAxMikKKyMgZGVmaW5lIERTSTBfUEhZ Q19FU0NfQ0xLX0xQRFRfU0hJRlQJMTIKKyMgZGVmaW5lIERTSTFfUEhZQ19DTEFORV9VTFBTCQlC SVQoMTcpCisjIGRlZmluZSBEU0kxX1BIWUNfQ0xBTkVfRU5BQkxFCQlCSVQoMTYpCisjIGRlZmlu ZSBEU0lfUEhZQ19ETEFORTNfVUxQUwkJQklUKDEzKQorIyBkZWZpbmUgRFNJX1BIWUNfRExBTkUz X0VOQUJMRQkJQklUKDEyKQorIyBkZWZpbmUgRFNJMF9QSFlDX0hTX0NMS19DT05USU5VT1VTCUJJ VCgxMCkKKyMgZGVmaW5lIERTSTBfUEhZQ19DTEFORV9VTFBTCQlCSVQoOSkKKyMgZGVmaW5lIERT SV9QSFlDX0RMQU5FMl9VTFBTCQlCSVQoOSkKKyMgZGVmaW5lIERTSTBfUEhZQ19DTEFORV9FTkFC TEUJCUJJVCg4KQorIyBkZWZpbmUgRFNJX1BIWUNfRExBTkUyX0VOQUJMRQkJQklUKDgpCisjIGRl ZmluZSBEU0lfUEhZQ19ETEFORTFfVUxQUwkJQklUKDUpCisjIGRlZmluZSBEU0lfUEhZQ19ETEFO RTFfRU5BQkxFCQlCSVQoNCkKKyMgZGVmaW5lIERTSV9QSFlDX0RMQU5FMF9GT1JDRV9TVE9QCUJJ VCgyKQorIyBkZWZpbmUgRFNJX1BIWUNfRExBTkUwX1VMUFMJCUJJVCgxKQorIyBkZWZpbmUgRFNJ X1BIWUNfRExBTkUwX0VOQUJMRQkJQklUKDApCisKKyNkZWZpbmUgRFNJMF9IU19DTFQwCQkweDQ0 CisjZGVmaW5lIERTSTBfSFNfQ0xUMQkJMHg0OAorI2RlZmluZSBEU0kwX0hTX0NMVDIJCTB4NGMK KyNkZWZpbmUgRFNJMF9IU19ETFQzCQkweDUwCisjZGVmaW5lIERTSTBfSFNfRExUNAkJMHg1NAor I2RlZmluZSBEU0kwX0hTX0RMVDUJCTB4NTgKKyNkZWZpbmUgRFNJMF9IU19ETFQ2CQkweDVjCisj ZGVmaW5lIERTSTBfSFNfRExUNwkJMHg2MAorCisjZGVmaW5lIERTSTBfUEhZX0FGRUMwCQkweDY0 CisjIGRlZmluZSBEU0kwX1BIWV9BRkVDMF9ERFIyQ0xLX0VOCQlCSVQoMjYpCisjIGRlZmluZSBE U0kwX1BIWV9BRkVDMF9ERFJDTEtfRU4JCUJJVCgyNSkKKyMgZGVmaW5lIERTSTBfUEhZX0FGRUMw X0xBVENIX1VMUFMJCUJJVCgyNCkKKyMgZGVmaW5lIERTSTFfUEhZX0FGRUMwX0lEUl9ETEFORTNf TUFTSwkJVkM0X01BU0soMzEsIDI5KQorIyBkZWZpbmUgRFNJMV9QSFlfQUZFQzBfSURSX0RMQU5F M19TSElGVAkyOQorIyBkZWZpbmUgRFNJMV9QSFlfQUZFQzBfSURSX0RMQU5FMl9NQVNLCQlWQzRf TUFTSygyOCwgMjYpCisjIGRlZmluZSBEU0kxX1BIWV9BRkVDMF9JRFJfRExBTkUyX1NISUZUCTI2 CisjIGRlZmluZSBEU0kxX1BIWV9BRkVDMF9JRFJfRExBTkUxX01BU0sJCVZDNF9NQVNLKDI3LCAy MykKKyMgZGVmaW5lIERTSTFfUEhZX0FGRUMwX0lEUl9ETEFORTFfU0hJRlQJMjMKKyMgZGVmaW5l IERTSTFfUEhZX0FGRUMwX0lEUl9ETEFORTBfTUFTSwkJVkM0X01BU0soMjIsIDIwKQorIyBkZWZp bmUgRFNJMV9QSFlfQUZFQzBfSURSX0RMQU5FMF9TSElGVAkyMAorIyBkZWZpbmUgRFNJMV9QSFlf QUZFQzBfSURSX0NMQU5FX01BU0sJCVZDNF9NQVNLKDE5LCAxNykKKyMgZGVmaW5lIERTSTFfUEhZ X0FGRUMwX0lEUl9DTEFORV9TSElGVAkJMTcKKyMgZGVmaW5lIERTSTBfUEhZX0FGRUMwX0FDVFJM X0RMQU5FMV9NQVNLCVZDNF9NQVNLKDIzLCAyMCkKKyMgZGVmaW5lIERTSTBfUEhZX0FGRUMwX0FD VFJMX0RMQU5FMV9TSElGVAkyMAorIyBkZWZpbmUgRFNJMF9QSFlfQUZFQzBfQUNUUkxfRExBTkUw X01BU0sJVkM0X01BU0soMTksIDE2KQorIyBkZWZpbmUgRFNJMF9QSFlfQUZFQzBfQUNUUkxfRExB TkUwX1NISUZUCTE2CisjIGRlZmluZSBEU0kwX1BIWV9BRkVDMF9BQ1RSTF9DTEFORV9NQVNLCVZD NF9NQVNLKDE1LCAxMikKKyMgZGVmaW5lIERTSTBfUEhZX0FGRUMwX0FDVFJMX0NMQU5FX1NISUZU CTEyCisjIGRlZmluZSBEU0kxX1BIWV9BRkVDMF9ERFIyQ0xLX0VOCQlCSVQoMTYpCisjIGRlZmlu ZSBEU0kxX1BIWV9BRkVDMF9ERFJDTEtfRU4JCUJJVCgxNSkKKyMgZGVmaW5lIERTSTFfUEhZX0FG RUMwX0xBVENIX1VMUFMJCUJJVCgxNCkKKyMgZGVmaW5lIERTSTFfUEhZX0FGRUMwX1JFU0VUCQkJ QklUKDEzKQorIyBkZWZpbmUgRFNJMV9QSFlfQUZFQzBfUEQJCQlCSVQoMTIpCisjIGRlZmluZSBE U0kwX1BIWV9BRkVDMF9SRVNFVAkJCUJJVCgxMSkKKyMgZGVmaW5lIERTSTFfUEhZX0FGRUMwX1BE X0JHCQkJQklUKDExKQorIyBkZWZpbmUgRFNJMF9QSFlfQUZFQzBfUEQJCQlCSVQoMTApCisjIGRl ZmluZSBEU0kxX1BIWV9BRkVDMF9QRF9ETEFORTMJCUJJVCgxMCkKKyMgZGVmaW5lIERTSTBfUEhZ X0FGRUMwX1BEX0JHCQkJQklUKDkpCisjIGRlZmluZSBEU0kxX1BIWV9BRkVDMF9QRF9ETEFORTIJ CUJJVCg5KQorIyBkZWZpbmUgRFNJMF9QSFlfQUZFQzBfUERfRExBTkUxCQlCSVQoOCkKKyMgZGVm aW5lIERTSTFfUEhZX0FGRUMwX1BEX0RMQU5FMQkJQklUKDgpCisjIGRlZmluZSBEU0lfUEhZX0FG RUMwX1BUQVRBREpfTUFTSwkJVkM0X01BU0soNywgNCkKKyMgZGVmaW5lIERTSV9QSFlfQUZFQzBf UFRBVEFESl9TSElGVAkJNAorIyBkZWZpbmUgRFNJX1BIWV9BRkVDMF9DVEFUQURKX01BU0sJCVZD NF9NQVNLKDMsIDApCisjIGRlZmluZSBEU0lfUEhZX0FGRUMwX0NUQVRBREpfU0hJRlQJCTAKKwor I2RlZmluZSBEU0kwX1BIWV9BRkVDMQkJMHg2OAorIyBkZWZpbmUgRFNJMF9QSFlfQUZFQzFfSURS X0RMQU5FMV9NQVNLCQlWQzRfTUFTSygxMCwgOCkKKyMgZGVmaW5lIERTSTBfUEhZX0FGRUMxX0lE Ul9ETEFORTFfU0hJRlQJOAorIyBkZWZpbmUgRFNJMF9QSFlfQUZFQzFfSURSX0RMQU5FMF9NQVNL CQlWQzRfTUFTSyg2LCA0KQorIyBkZWZpbmUgRFNJMF9QSFlfQUZFQzFfSURSX0RMQU5FMF9TSElG VAk0CisjIGRlZmluZSBEU0kwX1BIWV9BRkVDMV9JRFJfQ0xBTkVfTUFTSwkJVkM0X01BU0soMiwg MCkKKyMgZGVmaW5lIERTSTBfUEhZX0FGRUMxX0lEUl9DTEFORV9TSElGVAkJMAorCisjZGVmaW5l IERTSTBfVFNUX1NFTAkJMHg2YworI2RlZmluZSBEU0kwX1RTVF9NT04JCTB4NzAKKyNkZWZpbmUg RFNJMF9JRAkJCTB4NzQKKyMgZGVmaW5lIERTSV9JRF9WQUxVRQkJMHgwMDY0NzM2OQorCisjZGVm aW5lIERTSTFfQ1RSTAkJMHgwMAorIyBkZWZpbmUgRFNJX0NUUkxfSFNfQ0xLQ19NQVNLCQlWQzRf TUFTSygxNSwgMTQpCisjIGRlZmluZSBEU0lfQ1RSTF9IU19DTEtDX1NISUZUCQkxNAorIyBkZWZp bmUgRFNJX0NUUkxfSFNfQ0xLQ19CWVRFCQkwCisjIGRlZmluZSBEU0lfQ1RSTF9IU19DTEtDX0RE UjIJCTEKKyMgZGVmaW5lIERTSV9DVFJMX0hTX0NMS0NfRERSCQkyCisKKyMgZGVmaW5lIERTSV9D VFJMX1JYX0xQRFRfRU9UX0RJU0FCTEUJQklUKDEzKQorIyBkZWZpbmUgRFNJX0NUUkxfTFBEVF9F T1RfRElTQUJMRQlCSVQoMTIpCisjIGRlZmluZSBEU0lfQ1RSTF9IU0RUX0VPVF9ESVNBQkxFCUJJ VCgxMSkKKyMgZGVmaW5lIERTSV9DVFJMX1NPRlRfUkVTRVRfQ0ZHCUJJVCgxMCkKKyMgZGVmaW5l IERTSV9DVFJMX0NBTF9CWVRFCQlCSVQoOSkKKyMgZGVmaW5lIERTSV9DVFJMX0lOVl9CWVRFCQlC SVQoOCkKKyMgZGVmaW5lIERTSV9DVFJMX0NMUl9MREYJCUJJVCg3KQorIyBkZWZpbmUgRFNJMF9D VFJMX0NMUl9QQkNGCQlCSVQoNikKKyMgZGVmaW5lIERTSTFfQ1RSTF9DTFJfUlhGCQlCSVQoNikK KyMgZGVmaW5lIERTSTBfQ1RSTF9DTFJfQ1BCQ0YJCUJJVCg1KQorIyBkZWZpbmUgRFNJMV9DVFJM X0NMUl9QREYJCUJJVCg1KQorIyBkZWZpbmUgRFNJMF9DVFJMX0NMUl9QREYJCUJJVCg0KQorIyBk ZWZpbmUgRFNJMV9DVFJMX0NMUl9DREYJCUJJVCg0KQorIyBkZWZpbmUgRFNJMF9DVFJMX0NMUl9D REYJCUJJVCgzKQorIyBkZWZpbmUgRFNJMF9DVFJMX0NUUkwyCQlCSVQoMikKKyMgZGVmaW5lIERT STFfQ1RSTF9ESVNBQkxFX0RJU1BfQ1JDQwlCSVQoMikKKyMgZGVmaW5lIERTSTBfQ1RSTF9DVFJM MQkJQklUKDEpCisjIGRlZmluZSBEU0kxX0NUUkxfRElTQUJMRV9ESVNQX0VDQ0MJQklUKDEpCisj IGRlZmluZSBEU0kwX0NUUkxfQ1RSTDAJCUJJVCgwKQorIyBkZWZpbmUgRFNJMV9DVFJMX0VOCQkJ QklUKDApCisjIGRlZmluZSBEU0kwX0NUUkxfUkVTRVRfRklGT1MJCShEU0lfQ1RSTF9DTFJfTERG IHwgXAorCQkJCQkgRFNJMF9DVFJMX0NMUl9QQkNGIHwgXAorCQkJCQkgRFNJMF9DVFJMX0NMUl9D UEJDRiB8CVwKKwkJCQkJIERTSTBfQ1RSTF9DTFJfUERGIHwgXAorCQkJCQkgRFNJMF9DVFJMX0NM Ul9DREYpCisjIGRlZmluZSBEU0kxX0NUUkxfUkVTRVRfRklGT1MJCShEU0lfQ1RSTF9DTFJfTERG IHwgXAorCQkJCQkgRFNJMV9DVFJMX0NMUl9SWEYgfCBcCisJCQkJCSBEU0kxX0NUUkxfQ0xSX1BE RiB8IFwKKwkJCQkJIERTSTFfQ1RSTF9DTFJfQ0RGKQorCisjZGVmaW5lIERTSTFfVFhQS1QyQwkJ MHgwYworI2RlZmluZSBEU0kxX1RYUEtUMkgJCTB4MTAKKyNkZWZpbmUgRFNJMV9UWFBLVF9QSVhf RklGTwkweDIwCisjZGVmaW5lIERTSTFfUlhQS1RfRklGTwkJMHgyNAorI2RlZmluZSBEU0kxX0RJ U1AwX0NUUkwJCTB4MjgKKyNkZWZpbmUgRFNJMV9JTlRfU1RBVAkJMHgzMAorI2RlZmluZSBEU0kx X0lOVF9FTgkJMHgzNAorLyogU3RhdGUgcmVwb3J0aW5nIGJpdHMuICBUaGVzZSBtb3N0bHkgYmVo YXZlIGxpa2UgSU5UX1NUQVQsIHdoZXJlCisgKiB3cml0aW5nIGEgMSBjbGVhcnMgdGhlIGJpdC4K KyAqLworI2RlZmluZSBEU0kxX1NUQVQJCTB4MzgKKyMgZGVmaW5lIERTSTFfU1RBVF9QSFlfRDNf VUxQUwkJQklUKDMxKQorIyBkZWZpbmUgRFNJMV9TVEFUX1BIWV9EM19TVE9QCQlCSVQoMzApCisj IGRlZmluZSBEU0kxX1NUQVRfUEhZX0QyX1VMUFMJCUJJVCgyOSkKKyMgZGVmaW5lIERTSTFfU1RB VF9QSFlfRDJfU1RPUAkJQklUKDI4KQorIyBkZWZpbmUgRFNJMV9TVEFUX1BIWV9EMV9VTFBTCQlC SVQoMjcpCisjIGRlZmluZSBEU0kxX1NUQVRfUEhZX0QxX1NUT1AJCUJJVCgyNikKKyMgZGVmaW5l IERTSTFfU1RBVF9QSFlfRDBfVUxQUwkJQklUKDI1KQorIyBkZWZpbmUgRFNJMV9TVEFUX1BIWV9E MF9TVE9QCQlCSVQoMjQpCisjIGRlZmluZSBEU0kxX1NUQVRfRklGT19FUlIJCUJJVCgyMykKKyMg ZGVmaW5lIERTSTFfU1RBVF9QSFlfUlhMUERUCQlCSVQoMjIpCisjIGRlZmluZSBEU0kxX1NUQVRf UEhZX1JYVFJJRwkJQklUKDIxKQorIyBkZWZpbmUgRFNJMV9TVEFUX1BIWV9EMF9MUERUCQlCSVQo MjApCisvKiBTZXQgd2hlbiBpbiBmb3J3YXJkIGRpcmVjdGlvbiAqLworIyBkZWZpbmUgRFNJMV9T VEFUX1BIWV9ESVIJCUJJVCgxOSkKKyMgZGVmaW5lIERTSTFfU1RBVF9QSFlfQ0xPQ0tfVUxQUwlC SVQoMTgpCisjIGRlZmluZSBEU0kxX1NUQVRfUEhZX0NMT0NLX0hTCQlCSVQoMTcpCisjIGRlZmlu ZSBEU0kxX1NUQVRfUEhZX0NMT0NLX1NUT1AJQklUKDE2KQorIyBkZWZpbmUgRFNJMV9TVEFUX1BS X1RPCQlCSVQoMTUpCisjIGRlZmluZSBEU0kxX1NUQVRfVEFfVE8JCUJJVCgxNCkKKyMgZGVmaW5l IERTSTFfU1RBVF9MUFJYX1RPCQlCSVQoMTMpCisjIGRlZmluZSBEU0kxX1NUQVRfSFNUWF9UTwkJ QklUKDEyKQorIyBkZWZpbmUgRFNJMV9TVEFUX0VSUl9DT05UX0xQMQkJQklUKDExKQorIyBkZWZp bmUgRFNJMV9TVEFUX0VSUl9DT05UX0xQMAkJQklUKDEwKQorIyBkZWZpbmUgRFNJMV9TVEFUX0VS Ul9DT05UUk9MCQlCSVQoOSkKKyMgZGVmaW5lIERTSTFfU1RBVF9FUlJfU1lOQ19FU0MJCUJJVCg4 KQorIyBkZWZpbmUgRFNJMV9TVEFUX1JYUEtUMgkJQklUKDcpCisjIGRlZmluZSBEU0kxX1NUQVRf UlhQS1QxCQlCSVQoNikKKyMgZGVmaW5lIERTSTFfU1RBVF9UWFBLVDJfQlVTWQkJQklUKDUpCisj IGRlZmluZSBEU0kxX1NUQVRfVFhQS1QyX0RPTkUJCUJJVCg0KQorIyBkZWZpbmUgRFNJMV9TVEFU X1RYUEtUMl9FTkQJCUJJVCgzKQorIyBkZWZpbmUgRFNJMV9TVEFUX1RYUEtUMV9CVVNZCQlCSVQo MikKKyMgZGVmaW5lIERTSTFfU1RBVF9UWFBLVDFfRE9ORQkJQklUKDEpCisjIGRlZmluZSBEU0kx X1NUQVRfVFhQS1QxX0VORAkJQklUKDApCisKKyNkZWZpbmUgRFNJMV9IU1RYX1RPX0NOVAkweDNj CisjZGVmaW5lIERTSTFfTFBSWF9UT19DTlQJMHg0MAorI2RlZmluZSBEU0kxX1RBX1RPX0NOVAkJ MHg0NAorI2RlZmluZSBEU0kxX1BSX1RPX0NOVAkJMHg0OAorI2RlZmluZSBEU0kxX1BIWUMJCTB4 NGMKKworI2RlZmluZSBEU0kxX0hTX0NMVDAJCTB4NTAKKyMgZGVmaW5lIERTSV9IU19DTFQwX0Na RVJPX01BU0sJCVZDNF9NQVNLKDI2LCAxOCkKKyMgZGVmaW5lIERTSV9IU19DTFQwX0NaRVJPX1NI SUZUCTE4CisjIGRlZmluZSBEU0lfSFNfQ0xUMF9DUFJFX01BU0sJCVZDNF9NQVNLKDE3LCA5KQor IyBkZWZpbmUgRFNJX0hTX0NMVDBfQ1BSRV9TSElGVAkJOQorIyBkZWZpbmUgRFNJX0hTX0NMVDBf Q1BSRVBfTUFTSwkJVkM0X01BU0soOCwgMCkKKyMgZGVmaW5lIERTSV9IU19DTFQwX0NQUkVQX1NI SUZUCTAKKworI2RlZmluZSBEU0kxX0hTX0NMVDEJCTB4NTQKKyMgZGVmaW5lIERTSV9IU19DTFQx X0NUUkFJTF9NQVNLCVZDNF9NQVNLKDE3LCA5KQorIyBkZWZpbmUgRFNJX0hTX0NMVDFfQ1RSQUlM X1NISUZUCTkKKyMgZGVmaW5lIERTSV9IU19DTFQxX0NQT1NUX01BU0sJCVZDNF9NQVNLKDgsIDAp CisjIGRlZmluZSBEU0lfSFNfQ0xUMV9DUE9TVF9TSElGVAkwCisKKyNkZWZpbmUgRFNJMV9IU19D TFQyCQkweDU4CisjIGRlZmluZSBEU0lfSFNfQ0xUMl9XVVBfTUFTSwkJVkM0X01BU0soMjMsIDAp CisjIGRlZmluZSBEU0lfSFNfQ0xUMl9XVVBfU0hJRlQJCTAKKworI2RlZmluZSBEU0kxX0hTX0RM VDMJCTB4NWMKKyMgZGVmaW5lIERTSV9IU19ETFQzX0VYSVRfTUFTSwkJVkM0X01BU0soMjYsIDE4 KQorIyBkZWZpbmUgRFNJX0hTX0RMVDNfRVhJVF9TSElGVAkJMTgKKyMgZGVmaW5lIERTSV9IU19E TFQzX1pFUk9fTUFTSwkJVkM0X01BU0soMTcsIDkpCisjIGRlZmluZSBEU0lfSFNfRExUM19aRVJP X1NISUZUCQk5CisjIGRlZmluZSBEU0lfSFNfRExUM19QUkVfTUFTSwkJVkM0X01BU0soOCwgMCkK KyMgZGVmaW5lIERTSV9IU19ETFQzX1BSRV9TSElGVAkJMAorCisjZGVmaW5lIERTSTFfSFNfRExU NAkJMHg2MAorIyBkZWZpbmUgRFNJX0hTX0RMVDRfQU5MQVRfTUFTSwkJVkM0X01BU0soMjIsIDE4 KQorIyBkZWZpbmUgRFNJX0hTX0RMVDRfQU5MQVRfU0hJRlQJMTgKKyMgZGVmaW5lIERTSV9IU19E TFQ0X1RSQUlMX01BU0sJCVZDNF9NQVNLKDE3LCA5KQorIyBkZWZpbmUgRFNJX0hTX0RMVDRfVFJB SUxfU0hJRlQJOQorIyBkZWZpbmUgRFNJX0hTX0RMVDRfTFBYX01BU0sJCVZDNF9NQVNLKDgsIDAp CisjIGRlZmluZSBEU0lfSFNfRExUNF9MUFhfU0hJRlQJCTAKKworI2RlZmluZSBEU0kxX0hTX0RM VDUJCTB4NjQKKyMgZGVmaW5lIERTSV9IU19ETFQ1X0lOSVRfTUFTSwkJVkM0X01BU0soMjMsIDAp CisjIGRlZmluZSBEU0lfSFNfRExUNV9JTklUX1NISUZUCQkwCisKKyNkZWZpbmUgRFNJMV9IU19E TFQ2CQkweDY4CisjIGRlZmluZSBEU0lfSFNfRExUNl9UQV9HRVRfTUFTSwlWQzRfTUFTSygzMSwg MjQpCisjIGRlZmluZSBEU0lfSFNfRExUNl9UQV9HRVRfU0hJRlQJMjQKKyMgZGVmaW5lIERTSV9I U19ETFQ2X1RBX1NVUkVfTUFTSwlWQzRfTUFTSygyMywgMTYpCisjIGRlZmluZSBEU0lfSFNfRExU Nl9UQV9TVVJFX1NISUZUCTE2CisjIGRlZmluZSBEU0lfSFNfRExUNl9UQV9HT19NQVNLCQlWQzRf TUFTSygxNSwgOCkKKyMgZGVmaW5lIERTSV9IU19ETFQ2X1RBX0dPX1NISUZUCTgKKyMgZGVmaW5l IERTSV9IU19ETFQ2X0xQX0xQWF9NQVNLCVZDNF9NQVNLKDcsIDApCisjIGRlZmluZSBEU0lfSFNf RExUNl9MUF9MUFhfU0hJRlQJMAorCisjZGVmaW5lIERTSTFfSFNfRExUNwkJMHg2YworIyBkZWZp bmUgRFNJX0hTX0RMVDdfTFBfV1VQX01BU0sJVkM0X01BU0soMjMsIDApCisjIGRlZmluZSBEU0lf SFNfRExUN19MUF9XVVBfU0hJRlQJMAorCisjZGVmaW5lIERTSTFfUEhZX0FGRUMwCQkweDcwCisK KyNkZWZpbmUgRFNJMV9QSFlfQUZFQzEJCTB4NzQKKyMgZGVmaW5lIERTSTFfUEhZX0FGRUMxX0FD VFJMX0RMQU5FM19NQVNLCVZDNF9NQVNLKDE5LCAxNikKKyMgZGVmaW5lIERTSTFfUEhZX0FGRUMx X0FDVFJMX0RMQU5FM19TSElGVAkxNgorIyBkZWZpbmUgRFNJMV9QSFlfQUZFQzFfQUNUUkxfRExB TkUyX01BU0sJVkM0X01BU0soMTUsIDEyKQorIyBkZWZpbmUgRFNJMV9QSFlfQUZFQzFfQUNUUkxf RExBTkUyX1NISUZUCTEyCisjIGRlZmluZSBEU0kxX1BIWV9BRkVDMV9BQ1RSTF9ETEFORTFfTUFT SwlWQzRfTUFTSygxMSwgOCkKKyMgZGVmaW5lIERTSTFfUEhZX0FGRUMxX0FDVFJMX0RMQU5FMV9T SElGVAk4CisjIGRlZmluZSBEU0kxX1BIWV9BRkVDMV9BQ1RSTF9ETEFORTBfTUFTSwlWQzRfTUFT Syg3LCA0KQorIyBkZWZpbmUgRFNJMV9QSFlfQUZFQzFfQUNUUkxfRExBTkUwX1NISUZUCTQKKyMg ZGVmaW5lIERTSTFfUEhZX0FGRUMxX0FDVFJMX0NMQU5FX01BU0sJVkM0X01BU0soMywgMCkKKyMg ZGVmaW5lIERTSTFfUEhZX0FGRUMxX0FDVFJMX0NMQU5FX1NISUZUCTAKKworI2RlZmluZSBEU0kx X1RTVF9TRUwJCTB4NzgKKyNkZWZpbmUgRFNJMV9UU1RfTU9OCQkweDdjCisjZGVmaW5lIERTSTFf UEhZX1RTVDEJCTB4ODAKKyNkZWZpbmUgRFNJMV9QSFlfVFNUMgkJMHg4NAorI2RlZmluZSBEU0kx X1BIWV9GSUZPX1NUQVQJMHg4OAorLyogQWN0dWFsbHksIGFsbCByZWdpc3RlcnMgaW4gdGhlIHJh bmdlIHRoYXQgYXJlbid0IG90aGVyd2lzZSBjbGFpbWVkCisgKiB3aWxsIHJldHVybiB0aGUgSUQu CisgKi8KKyNkZWZpbmUgRFNJMV9JRAkJCTB4OGMKKworLyogR2VuZXJhbCBEU0kgaGFyZHdhcmUg c3RhdGUuICovCitzdHJ1Y3QgdmM0X2RzaSB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl djsKKworCXN0cnVjdCBtaXBpX2RzaV9ob3N0IGRzaV9ob3N0OworCXN0cnVjdCBkcm1fZW5jb2Rl ciAqZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCXN0cnVjdCBk cm1fcGFuZWwgKnBhbmVsOworCisJdm9pZCBfX2lvbWVtICpyZWdzOworCisJc3RydWN0IGRtYV9j aGFuICpyZWdfZG1hX2NoYW47CisJZG1hX2FkZHJfdCByZWdfZG1hX3BhZGRyOworCXUzMiAqcmVn X2RtYV9tZW07CisJZG1hX2FkZHJfdCByZWdfcGFkZHI7CisKKwkvKiBXaGV0aGVyIHdlJ3JlIG9u IGJjbTI4MzUncyBEU0kwIG9yIERTSTEuICovCisJaW50IHBvcnQ7CisKKwkvKiBEU0kgY2hhbm5l bCBmb3IgdGhlIHBhbmVsIHdlJ3JlIGNvbm5lY3RlZCB0by4gKi8KKwl1MzIgY2hhbm5lbDsKKwl1 MzIgbGFuZXM7CisJZW51bSBtaXBpX2RzaV9waXhlbF9mb3JtYXQgZm9ybWF0OworCXUzMiBtb2Rl X2ZsYWdzOworCisJLyogSW5wdXQgY2xvY2sgZnJvbSBDUFJNQU4gdG8gdGhlIGRpZ2l0YWwgUEhZ LCBmb3IgdGhlIERTSQorCSAqIGVzY2FwZSBjbG9jay4KKwkgKi8KKwlzdHJ1Y3QgY2xrICplc2Nh cGVfY2xvY2s7CisKKwkvKiBJbnB1dCBjbG9jayB0byB0aGUgYW5hbG9nIFBIWSwgdXNlZCB0byBn ZW5lcmF0ZSB0aGUgRFNJIGJpdAorCSAqIGNsb2NrLgorCSAqLworCXN0cnVjdCBjbGsgKnBsbF9w aHlfY2xvY2s7CisKKwkvKiBIUyBDbG9ja3MgZ2VuZXJhdGVkIHdpdGhpbiB0aGUgRFNJIGFuYWxv ZyBQSFkuICovCisJc3RydWN0IGNsa19maXhlZF9mYWN0b3IgcGh5X2Nsb2Nrc1szXTsKKworCXN0 cnVjdCBjbGtfaHdfb25lY2VsbF9kYXRhICpjbGtfb25lY2VsbDsKKworCS8qIFBpeGVsIGNsb2Nr IG91dHB1dCB0byB0aGUgcGl4ZWx2YWx2ZSwgZ2VuZXJhdGVkIGZyb20gdGhlIEhTCisJICogY2xv Y2suCisJICovCisJc3RydWN0IGNsayAqcGl4ZWxfY2xvY2s7CisKKwlzdHJ1Y3QgY29tcGxldGlv biB4ZmVyX2NvbXBsZXRpb247CisJaW50IHhmZXJfcmVzdWx0OworfTsKKworI2RlZmluZSBob3N0 X3RvX2RzaShob3N0KSBjb250YWluZXJfb2YoaG9zdCwgc3RydWN0IHZjNF9kc2ksIGRzaV9ob3N0 KQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RzaV9kbWFfd29ya2Fyb3VuZF93cml0ZShzdHJ1Y3Qg dmM0X2RzaSAqZHNpLCB1MzIgb2Zmc2V0LCB1MzIgdmFsKQoreworCXN0cnVjdCBkbWFfY2hhbiAq Y2hhbiA9IGRzaS0+cmVnX2RtYV9jaGFuOworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRv ciAqdHg7CisJZG1hX2Nvb2tpZV90IGNvb2tpZTsKKwlpbnQgcmV0OworCisJLyogRFNJMCBzaG91 bGQgYmUgYWJsZSB0byB3cml0ZSBub3JtYWxseS4gKi8KKwlpZiAoIWNoYW4pIHsKKwkJd3JpdGVs KHZhbCwgZHNpLT5yZWdzICsgb2Zmc2V0KTsKKwkJcmV0dXJuOworCX0KKworCSpkc2ktPnJlZ19k bWFfbWVtID0gdmFsOworCisJdHggPSBjaGFuLT5kZXZpY2UtPmRldmljZV9wcmVwX2RtYV9tZW1j cHkoY2hhbiwKKwkJCQkJCSAgZHNpLT5yZWdfcGFkZHIgKyBvZmZzZXQsCisJCQkJCQkgIGRzaS0+ cmVnX2RtYV9wYWRkciwKKwkJCQkJCSAgNCwgMCk7CisJaWYgKCF0eCkgeworCQlEUk1fRVJST1Io IkZhaWxlZCB0byBzZXQgdXAgRE1BIHJlZ2lzdGVyIHdyaXRlXG4iKTsKKwkJcmV0dXJuOworCX0K KworCWNvb2tpZSA9IHR4LT50eF9zdWJtaXQodHgpOworCXJldCA9IGRtYV9zdWJtaXRfZXJyb3Io Y29va2llKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIHN1Ym1pdCBETUE6 ICVkXG4iLCByZXQpOworCQlyZXR1cm47CisJfQorCXJldCA9IGRtYV9zeW5jX3dhaXQoY2hhbiwg Y29va2llKTsKKwlpZiAocmV0KQorCQlEUk1fRVJST1IoIkZhaWxlZCB0byB3YWl0IGZvciBETUE6 ICVkXG4iLCByZXQpOworfQorCisjZGVmaW5lIERTSV9SRUFEKG9mZnNldCkgcmVhZGwoZHNpLT5y ZWdzICsgKG9mZnNldCkpCisjZGVmaW5lIERTSV9XUklURShvZmZzZXQsIHZhbCkgZHNpX2RtYV93 b3JrYXJvdW5kX3dyaXRlKGRzaSwgb2Zmc2V0LCB2YWwpCisjZGVmaW5lIERTSV9QT1JUX1JFQUQo b2Zmc2V0KSBcCisJRFNJX1JFQUQoZHNpLT5wb3J0ID8gRFNJMV8jI29mZnNldCA6IERTSTBfIyNv ZmZzZXQpCisjZGVmaW5lIERTSV9QT1JUX1dSSVRFKG9mZnNldCwgdmFsKSBcCisJRFNJX1dSSVRF KGRzaS0+cG9ydCA/IERTSTFfIyNvZmZzZXQgOiBEU0kwXyMjb2Zmc2V0LCB2YWwpCisjZGVmaW5l IERTSV9QT1JUX0JJVChiaXQpIChkc2ktPnBvcnQgPyBEU0kxXyMjYml0IDogRFNJMF8jI2JpdCkK KworLyogVkM0IERTSSBlbmNvZGVyIEtNUyBzdHJ1Y3QgKi8KK3N0cnVjdCB2YzRfZHNpX2VuY29k ZXIgeworCXN0cnVjdCB2YzRfZW5jb2RlciBiYXNlOworCXN0cnVjdCB2YzRfZHNpICpkc2k7Cit9 OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2YzRfZHNpX2VuY29kZXIgKgordG9fdmM0X2RzaV9l bmNvZGVyKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlyZXR1cm4gY29udGFpbmVy X29mKGVuY29kZXIsIHN0cnVjdCB2YzRfZHNpX2VuY29kZXIsIGJhc2UuYmFzZSk7Cit9CisKKy8q IFZDNCBEU0kgY29ubmVjdG9yIEtNUyBzdHJ1Y3QgKi8KK3N0cnVjdCB2YzRfZHNpX2Nvbm5lY3Rv ciB7CisJc3RydWN0IGRybV9jb25uZWN0b3IgYmFzZTsKKwlzdHJ1Y3QgdmM0X2RzaSAqZHNpOwor fTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdmM0X2RzaV9jb25uZWN0b3IgKgordG9fdmM0X2Rz aV9jb25uZWN0b3Ioc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlyZXR1cm4g Y29udGFpbmVyX29mKGNvbm5lY3Rvciwgc3RydWN0IHZjNF9kc2lfY29ubmVjdG9yLCBiYXNlKTsK K30KKworI2RlZmluZSBEU0lfUkVHKHJlZykgeyByZWcsICNyZWcgfQorc3RhdGljIGNvbnN0IHN0 cnVjdCB7CisJdTMyIHJlZzsKKwljb25zdCBjaGFyICpuYW1lOworfSBkc2kwX3JlZ3NbXSA9IHsK KwlEU0lfUkVHKERTSTBfQ1RSTCksCisJRFNJX1JFRyhEU0kwX1NUQVQpLAorCURTSV9SRUcoRFNJ MF9IU1RYX1RPX0NOVCksCisJRFNJX1JFRyhEU0kwX0xQUlhfVE9fQ05UKSwKKwlEU0lfUkVHKERT STBfVEFfVE9fQ05UKSwKKwlEU0lfUkVHKERTSTBfUFJfVE9fQ05UKSwKKwlEU0lfUkVHKERTSTBf RElTUDBfQ1RSTCksCisJRFNJX1JFRyhEU0kwX0RJU1AxX0NUUkwpLAorCURTSV9SRUcoRFNJMF9J TlRfU1RBVCksCisJRFNJX1JFRyhEU0kwX0lOVF9FTiksCisJRFNJX1JFRyhEU0kwX1BIWUMpLAor CURTSV9SRUcoRFNJMF9IU19DTFQwKSwKKwlEU0lfUkVHKERTSTBfSFNfQ0xUMSksCisJRFNJX1JF RyhEU0kwX0hTX0NMVDIpLAorCURTSV9SRUcoRFNJMF9IU19ETFQzKSwKKwlEU0lfUkVHKERTSTBf SFNfRExUNCksCisJRFNJX1JFRyhEU0kwX0hTX0RMVDUpLAorCURTSV9SRUcoRFNJMF9IU19ETFQ2 KSwKKwlEU0lfUkVHKERTSTBfSFNfRExUNyksCisJRFNJX1JFRyhEU0kwX1BIWV9BRkVDMCksCisJ RFNJX1JFRyhEU0kwX1BIWV9BRkVDMSksCisJRFNJX1JFRyhEU0kwX0lEKSwKK307CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgeworCXUzMiByZWc7CisJY29uc3QgY2hhciAqbmFtZTsKK30gZHNpMV9y ZWdzW10gPSB7CisJRFNJX1JFRyhEU0kxX0NUUkwpLAorCURTSV9SRUcoRFNJMV9TVEFUKSwKKwlE U0lfUkVHKERTSTFfSFNUWF9UT19DTlQpLAorCURTSV9SRUcoRFNJMV9MUFJYX1RPX0NOVCksCisJ RFNJX1JFRyhEU0kxX1RBX1RPX0NOVCksCisJRFNJX1JFRyhEU0kxX1BSX1RPX0NOVCksCisJRFNJ X1JFRyhEU0kxX0RJU1AwX0NUUkwpLAorCURTSV9SRUcoRFNJMV9ESVNQMV9DVFJMKSwKKwlEU0lf UkVHKERTSTFfSU5UX1NUQVQpLAorCURTSV9SRUcoRFNJMV9JTlRfRU4pLAorCURTSV9SRUcoRFNJ MV9QSFlDKSwKKwlEU0lfUkVHKERTSTFfSFNfQ0xUMCksCisJRFNJX1JFRyhEU0kxX0hTX0NMVDEp LAorCURTSV9SRUcoRFNJMV9IU19DTFQyKSwKKwlEU0lfUkVHKERTSTFfSFNfRExUMyksCisJRFNJ X1JFRyhEU0kxX0hTX0RMVDQpLAorCURTSV9SRUcoRFNJMV9IU19ETFQ1KSwKKwlEU0lfUkVHKERT STFfSFNfRExUNiksCisJRFNJX1JFRyhEU0kxX0hTX0RMVDcpLAorCURTSV9SRUcoRFNJMV9QSFlf QUZFQzApLAorCURTSV9SRUcoRFNJMV9QSFlfQUZFQzEpLAorCURTSV9SRUcoRFNJMV9JRCksCit9 OworCitzdGF0aWMgdm9pZCB2YzRfZHNpX2R1bXBfcmVncyhzdHJ1Y3QgdmM0X2RzaSAqZHNpKQor eworCWludCBpOworCisJaWYgKGRzaS0+cG9ydCA9PSAwKSB7CisJCWZvciAoaSA9IDA7IGkgPCBB UlJBWV9TSVpFKGRzaTBfcmVncyk7IGkrKykgeworCQkJRFJNX0lORk8oIjB4JTA0eCAoJXMpOiAw eCUwOHhcbiIsCisJCQkJIGRzaTBfcmVnc1tpXS5yZWcsIGRzaTBfcmVnc1tpXS5uYW1lLAorCQkJ CSBEU0lfUkVBRChkc2kwX3JlZ3NbaV0ucmVnKSk7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShkc2kxX3JlZ3MpOyBpKyspIHsKKwkJCURSTV9JTkZPKCIweCUw NHggKCVzKTogMHglMDh4XG4iLAorCQkJCSBkc2kxX3JlZ3NbaV0ucmVnLCBkc2kxX3JlZ3NbaV0u bmFtZSwKKwkJCQkgRFNJX1JFQUQoZHNpMV9yZWdzW2ldLnJlZykpOworCQl9CisJfQorfQorCisj aWZkZWYgQ09ORklHX0RFQlVHX0ZTCitpbnQgdmM0X2RzaV9kZWJ1Z2ZzX3JlZ3Moc3RydWN0IHNl cV9maWxlICptLCB2b2lkICp1bnVzZWQpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUg PSAoc3RydWN0IGRybV9pbmZvX25vZGUgKiltLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNl ICpkcm0gPSBub2RlLT5taW5vci0+ZGV2OworCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRf ZGV2KGRybSk7CisJaW50IGRzaV9pbmRleCA9ICh1aW50cHRyX3Qpbm9kZS0+aW5mb19lbnQtPmRh dGE7CisJc3RydWN0IHZjNF9kc2kgKmRzaSA9IChkc2lfaW5kZXggPT0gMSA/IHZjNC0+ZHNpMSA6 IE5VTEwpOworCWludCBpOworCisJaWYgKCFkc2kpCisJCXJldHVybiAwOworCisJaWYgKGRzaS0+ cG9ydCA9PSAwKSB7CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRzaTBfcmVncyk7IGkr KykgeworCQkJc2VxX3ByaW50ZihtLCAiMHglMDR4ICglcyk6IDB4JTA4eFxuIiwKKwkJCQkgICBk c2kwX3JlZ3NbaV0ucmVnLCBkc2kwX3JlZ3NbaV0ubmFtZSwKKwkJCQkgICBEU0lfUkVBRChkc2kw X3JlZ3NbaV0ucmVnKSk7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShkc2kxX3JlZ3MpOyBpKyspIHsKKwkJCXNlcV9wcmludGYobSwgIjB4JTA0eCAoJXMpOiAw eCUwOHhcbiIsCisJCQkJICAgZHNpMV9yZWdzW2ldLnJlZywgZHNpMV9yZWdzW2ldLm5hbWUsCisJ CQkJICAgRFNJX1JFQUQoZHNpMV9yZWdzW2ldLnJlZykpOworCQl9CisJfQorCisJcmV0dXJuIDA7 Cit9CisjZW5kaWYKKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKK3ZjNF9kc2lf Y29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZv cmNlKQoreworCXN0cnVjdCB2YzRfZHNpX2Nvbm5lY3RvciAqdmM0X2Nvbm5lY3RvciA9CisJCXRv X3ZjNF9kc2lfY29ubmVjdG9yKGNvbm5lY3Rvcik7CisJc3RydWN0IHZjNF9kc2kgKmRzaSA9IHZj NF9jb25uZWN0b3ItPmRzaTsKKworCWlmIChkc2ktPnBhbmVsKQorCQlyZXR1cm4gY29ubmVjdG9y X3N0YXR1c19jb25uZWN0ZWQ7CisJZWxzZQorCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19kaXNj b25uZWN0ZWQ7Cit9CisKK3N0YXRpYyB2b2lkIHZjNF9kc2lfY29ubmVjdG9yX2Rlc3Ryb3koc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlkcm1fY29ubmVjdG9yX3VucmVnaXN0 ZXIoY29ubmVjdG9yKTsKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKK30KKwor c3RhdGljIGludCB2YzRfZHNpX2Nvbm5lY3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgdmM0X2RzaV9jb25uZWN0b3IgKnZjNF9jb25uZWN0 b3IgPQorCQl0b192YzRfZHNpX2Nvbm5lY3Rvcihjb25uZWN0b3IpOworCXN0cnVjdCB2YzRfZHNp ICpkc2kgPSB2YzRfY29ubmVjdG9yLT5kc2k7CisKKwlpZiAoZHNpLT5wYW5lbCkKKwkJcmV0dXJu IGRybV9wYW5lbF9nZXRfbW9kZXMoZHNpLT5wYW5lbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIHZjNF9kc2lfY29ubmVjdG9yX2Z1 bmNzID0geworCS5kcG1zID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2RwbXMsCisJLmRl dGVjdCA9IHZjNF9kc2lfY29ubmVjdG9yX2RldGVjdCwKKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxw ZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkuZGVzdHJveSA9IHZjNF9kc2lfY29u bmVjdG9yX2Rlc3Ryb3ksCisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jl c2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVj dG9yX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWlj X2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgdmM0X2RzaV9jb25uZWN0b3JfaGVscGVyX2Z1 bmNzID0geworCS5nZXRfbW9kZXMgPSB2YzRfZHNpX2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCit9Owor CitzdGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3IgKnZjNF9kc2lfY29ubmVjdG9yX2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJCSAgICBzdHJ1Y3QgdmM0X2RzaSAqZHNpKQorewor CXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBOVUxMOworCXN0cnVjdCB2YzRfZHNp X2Nvbm5lY3RvciAqZHNpX2Nvbm5lY3RvcjsKKwlpbnQgcmV0ID0gMDsKKworCWRzaV9jb25uZWN0 b3IgPSBkZXZtX2t6YWxsb2MoZGV2LT5kZXYsIHNpemVvZigqZHNpX2Nvbm5lY3RvciksCisJCQkJ ICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWRzaV9jb25uZWN0b3IpIHsKKwkJcmV0ID0gLUVOT01F TTsKKwkJZ290byBmYWlsOworCX0KKwljb25uZWN0b3IgPSAmZHNpX2Nvbm5lY3Rvci0+YmFzZTsK KworCWRzaV9jb25uZWN0b3ItPmRzaSA9IGRzaTsKKworCWRybV9jb25uZWN0b3JfaW5pdChkZXYs IGNvbm5lY3RvciwgJnZjNF9kc2lfY29ubmVjdG9yX2Z1bmNzLAorCQkJICAgRFJNX01PREVfQ09O TkVDVE9SX0RTSSk7CisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwgJnZjNF9k c2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisKKwljb25uZWN0b3ItPnBvbGxlZCA9IDA7CisJ Y29ubmVjdG9yLT5pbnRlcmxhY2VfYWxsb3dlZCA9IDA7CisJY29ubmVjdG9yLT5kb3VibGVzY2Fu X2FsbG93ZWQgPSAwOworCisJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKGNvbm5l Y3RvciwgZHNpLT5lbmNvZGVyKTsKKworCXJldHVybiBjb25uZWN0b3I7CisKK2ZhaWw6CisJaWYg KGNvbm5lY3RvcikKKwkJdmM0X2RzaV9jb25uZWN0b3JfZGVzdHJveShjb25uZWN0b3IpOworCisJ cmV0dXJuIEVSUl9QVFIocmV0KTsKK30KKworc3RhdGljIHZvaWQgdmM0X2RzaV9lbmNvZGVyX2Rl c3Ryb3koc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCWRybV9lbmNvZGVyX2NsZWFu dXAoZW5jb2Rlcik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3Mg dmM0X2RzaV9lbmNvZGVyX2Z1bmNzID0geworCS5kZXN0cm95ID0gdmM0X2RzaV9lbmNvZGVyX2Rl c3Ryb3ksCit9OworCitzdGF0aWMgdm9pZCB2YzRfZHNpX2xhdGNoX3VscHMoc3RydWN0IHZjNF9k c2kgKmRzaSwgYm9vbCBsYXRjaCkKK3sKKwl1MzIgYWZlYzAgPSBEU0lfUE9SVF9SRUFEKFBIWV9B RkVDMCk7CisKKwlpZiAobGF0Y2gpCisJCWFmZWMwIHw9IERTSV9QT1JUX0JJVChQSFlfQUZFQzBf TEFUQ0hfVUxQUyk7CisJZWxzZQorCQlhZmVjMCAmPSB+RFNJX1BPUlRfQklUKFBIWV9BRkVDMF9M QVRDSF9VTFBTKTsKKworCURTSV9QT1JUX1dSSVRFKFBIWV9BRkVDMCwgYWZlYzApOworfQorCisv KiBFbnRlcnMgb3IgZXhpdHMgVWx0cmEgTG93IFBvd2VyIFN0YXRlLiAqLworc3RhdGljIHZvaWQg dmM0X2RzaV91bHBzKHN0cnVjdCB2YzRfZHNpICpkc2ksIGJvb2wgdWxwcykKK3sKKwlib29sIGNv bnRpbnVvdXMgPSBkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9DTE9DS19OT05fQ09OVElOVU9V UzsKKwl1MzIgcGh5Y191bHBzID0gKChjb250aW51b3VzID8gRFNJX1BPUlRfQklUKFBIWUNfQ0xB TkVfVUxQUykgOiAwKSB8CisJCQkgRFNJX1BIWUNfRExBTkUwX1VMUFMgfAorCQkJIChkc2ktPmxh bmVzID4gMSA/IERTSV9QSFlDX0RMQU5FMV9VTFBTIDogMCkgfAorCQkJIChkc2ktPmxhbmVzID4g MiA/IERTSV9QSFlDX0RMQU5FMl9VTFBTIDogMCkgfAorCQkJIChkc2ktPmxhbmVzID4gMyA/IERT SV9QSFlDX0RMQU5FM19VTFBTIDogMCkpOworCXUzMiBzdGF0X3VscHMgPSAoKGNvbnRpbnVvdXMg PyBEU0kxX1NUQVRfUEhZX0NMT0NLX1VMUFMgOiAwKSB8CisJCQkgRFNJMV9TVEFUX1BIWV9EMF9V TFBTIHwKKwkJCSAoZHNpLT5sYW5lcyA+IDEgPyBEU0kxX1NUQVRfUEhZX0QxX1VMUFMgOiAwKSB8 CisJCQkgKGRzaS0+bGFuZXMgPiAyID8gRFNJMV9TVEFUX1BIWV9EMl9VTFBTIDogMCkgfAorCQkJ IChkc2ktPmxhbmVzID4gMyA/IERTSTFfU1RBVF9QSFlfRDNfVUxQUyA6IDApKTsKKwl1MzIgc3Rh dF9zdG9wID0gKChjb250aW51b3VzID8gRFNJMV9TVEFUX1BIWV9DTE9DS19TVE9QIDogMCkgfAor CQkJIERTSTFfU1RBVF9QSFlfRDBfU1RPUCB8CisJCQkgKGRzaS0+bGFuZXMgPiAxID8gRFNJMV9T VEFUX1BIWV9EMV9TVE9QIDogMCkgfAorCQkJIChkc2ktPmxhbmVzID4gMiA/IERTSTFfU1RBVF9Q SFlfRDJfU1RPUCA6IDApIHwKKwkJCSAoZHNpLT5sYW5lcyA+IDMgPyBEU0kxX1NUQVRfUEhZX0Qz X1NUT1AgOiAwKSk7CisJaW50IHJldDsKKworCURTSV9QT1JUX1dSSVRFKFNUQVQsIHN0YXRfdWxw cyk7CisJRFNJX1BPUlRfV1JJVEUoUEhZQywgRFNJX1BPUlRfUkVBRChQSFlDKSB8IHBoeWNfdWxw cyk7CisJcmV0ID0gd2FpdF9mb3IoKERTSV9QT1JUX1JFQUQoU1RBVCkgJiBzdGF0X3VscHMpID09 IHN0YXRfdWxwcywgMjAwKTsKKwlpZiAocmV0KSB7CisJCWRldl93YXJuKCZkc2ktPnBkZXYtPmRl diwKKwkJCSAiVGltZW91dCB3YWl0aW5nIGZvciBEU0kgVUxQUyBlbnRyeTogU1RBVCAweCUwOHgi LAorCQkJIERTSV9QT1JUX1JFQUQoU1RBVCkpOworCQlEU0lfUE9SVF9XUklURShQSFlDLCBEU0lf UE9SVF9SRUFEKFBIWUMpICYgfnBoeWNfdWxwcyk7CisJCXZjNF9kc2lfbGF0Y2hfdWxwcyhkc2ks IGZhbHNlKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFRoZSBEU0kgbW9kdWxlIGNhbid0IGJlIGRp c2FibGVkIHdoaWxlIHRoZSBtb2R1bGUgaXMKKwkgKiBnZW5lcmF0aW5nIFVMUFMgc3RhdGUuICBT bywgdG8gYmUgYWJsZSB0byBkaXNhYmxlIHRoZQorCSAqIG1vZHVsZSwgd2UgaGF2ZSB0aGUgQUZF IGxhdGNoIHRoZSBVTFBTIHN0YXRlIGFuZCBjb250aW51ZQorCSAqIG9uIHRvIGhhdmluZyB0aGUg bW9kdWxlIGVudGVyIFNUT1AuCisJICovCisJdmM0X2RzaV9sYXRjaF91bHBzKGRzaSwgdWxwcyk7 CisKKwlEU0lfUE9SVF9XUklURShTVEFULCBzdGF0X3N0b3ApOworCURTSV9QT1JUX1dSSVRFKFBI WUMsIERTSV9QT1JUX1JFQUQoUEhZQykgJiB+cGh5Y191bHBzKTsKKwlyZXQgPSB3YWl0X2Zvcigo RFNJX1BPUlRfUkVBRChTVEFUKSAmIHN0YXRfc3RvcCkgPT0gc3RhdF9zdG9wLCAyMDApOworCWlm IChyZXQpIHsKKwkJZGV2X3dhcm4oJmRzaS0+cGRldi0+ZGV2LAorCQkJICJUaW1lb3V0IHdhaXRp bmcgZm9yIERTSSBTVE9QIGVudHJ5OiBTVEFUIDB4JTA4eCIsCisJCQkgRFNJX1BPUlRfUkVBRChT VEFUKSk7CisJCURTSV9QT1JUX1dSSVRFKFBIWUMsIERTSV9QT1JUX1JFQUQoUEhZQykgJiB+cGh5 Y191bHBzKTsKKwkJcmV0dXJuOworCX0KK30KKworc3RhdGljIHUzMgorZHNpX2hzX3RpbWluZyh1 MzIgdWlfbnMsIHUzMiBucywgdTMyIHVpKQoreworCS8qIFRoZSBIUyB0aW1pbmdzIGhhdmUgdG8g YmUgcm91bmRlZCB1cCB0byBhIG11bHRpcGxlIG9mIDgKKwkgKiBiZWNhdXNlIHdlJ3JlIHVzaW5n IHRoZSBieXRlIGNsb2NrLgorCSAqLworCXJldHVybiByb3VuZHVwKHVpICsgRElWX1JPVU5EX1VQ KG5zLCB1aV9ucyksIDgpOworfQorCisvKiBFU0MgYWx3YXlzIHJ1bnMgYXQgMTAwTWh6LiAqLwor I2RlZmluZSBFU0NfVElNRV9OUyAxMAorCitzdGF0aWMgdTMyCitkc2lfZXNjX3RpbWluZyh1MzIg bnMpCit7CisJcmV0dXJuIERJVl9ST1VORF9VUChucywgRVNDX1RJTUVfTlMpOworfQorCitzdGF0 aWMgdm9pZCB2YzRfZHNpX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXIpCit7CisJc3RydWN0IHZjNF9kc2lfZW5jb2RlciAqdmM0X2VuY29kZXIgPSB0b192YzRfZHNp X2VuY29kZXIoZW5jb2Rlcik7CisJc3RydWN0IHZjNF9kc2kgKmRzaSA9IHZjNF9lbmNvZGVyLT5k c2k7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRzaS0+cGRldi0+ZGV2OworCisJZHJtX3BhbmVs X2Rpc2FibGUoZHNpLT5wYW5lbCk7CisKKwl2YzRfZHNpX3VscHMoZHNpLCB0cnVlKTsKKworCWRy bV9wYW5lbF91bnByZXBhcmUoZHNpLT5wYW5lbCk7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUo ZHNpLT5wbGxfcGh5X2Nsb2NrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5lc2NhcGVf Y2xvY2spOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnBpeGVsX2Nsb2NrKTsKKworCXBt X3J1bnRpbWVfcHV0KGRldik7Cit9CisKK3N0YXRpYyB2b2lkIHZjNF9kc2lfZW5jb2Rlcl9lbmFi bGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICptb2RlID0gJmVuY29kZXItPmNydGMtPm1vZGU7CisJc3RydWN0IHZjNF9kc2lfZW5jb2Rl ciAqdmM0X2VuY29kZXIgPSB0b192YzRfZHNpX2VuY29kZXIoZW5jb2Rlcik7CisJc3RydWN0IHZj NF9kc2kgKmRzaSA9IHZjNF9lbmNvZGVyLT5kc2k7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRz aS0+cGRldi0+ZGV2OworCXUzMiBmb3JtYXQgPSAwLCBkaXZpZGVyID0gMDsKKwlib29sIGRlYnVn X2R1bXBfcmVncyA9IGZhbHNlOworCXVuc2lnbmVkIGxvbmcgaHNfY2xvY2s7CisJdTMyIHVpX25z OworCS8qIE1pbmltdW0gTFAgc3RhdGUgZHVyYXRpb24gaW4gZXNjYXBlIGNsb2NrIGN5Y2xlcy4g Ki8KKwl1MzIgbHB4ID0gZHNpX2VzY190aW1pbmcoNjApOworCXVuc2lnbmVkIGxvbmcgcGl4ZWxf Y2xvY2tfaHogPSBtb2RlLT5jbG9jayAqIDEwMDA7CisJdW5zaWduZWQgbG9uZyBkc2lwX2Nsb2Nr OworCXVuc2lnbmVkIGxvbmcgcGh5X2Nsb2NrOworCWludCByZXQ7CisKKwlyZXQgPSBwbV9ydW50 aW1lX2dldF9zeW5jKGRldik7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBy dW50aW1lIFBNIGVuYWJsZSBvbiBEU0klZFxuIiwgZHNpLT5wb3J0KTsKKwkJcmV0dXJuOworCX0K KworCXJldCA9IGRybV9wYW5lbF9wcmVwYXJlKGRzaS0+cGFuZWwpOworCWlmIChyZXQpIHsKKwkJ RFJNX0VSUk9SKCJQYW5lbCBmYWlsZWQgdG8gcHJlcGFyZVxuIik7CisJCXJldHVybjsKKwl9CisK KwlpZiAoZGVidWdfZHVtcF9yZWdzKSB7CisJCURSTV9JTkZPKCJEU0kgcmVncyBiZWZvcmU6XG4i KTsKKwkJdmM0X2RzaV9kdW1wX3JlZ3MoZHNpKTsKKwl9CisKKwlzd2l0Y2ggKGRzaS0+Zm9ybWF0 KSB7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCODg4OgorCQlmb3JtYXQgPSBEU0lfUEZPUk1BVF9S R0I4ODg7CisJCWRpdmlkZXIgPSAyNCAvIGRzaS0+bGFuZXM7CisJCWJyZWFrOworCWNhc2UgTUlQ SV9EU0lfRk1UX1JHQjY2NjoKKwkJZm9ybWF0ID0gRFNJX1BGT1JNQVRfUkdCNjY2OworCQlkaXZp ZGVyID0gMjQgLyBkc2ktPmxhbmVzOworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2 NjZfUEFDS0VEOgorCQlmb3JtYXQgPSBEU0lfUEZPUk1BVF9SR0I2NjZfUEFDS0VEOworCQlkaXZp ZGVyID0gMTggLyBkc2ktPmxhbmVzOworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I1 NjU6CisJCWZvcm1hdCA9IERTSV9QRk9STUFUX1JHQjU2NTsKKwkJZGl2aWRlciA9IDE2IC8gZHNp LT5sYW5lczsKKwkJYnJlYWs7CisJfQorCisJcGh5X2Nsb2NrID0gcGl4ZWxfY2xvY2tfaHogKiBk aXZpZGVyOworCXJldCA9IGNsa19zZXRfcmF0ZShkc2ktPnBsbF9waHlfY2xvY2ssIHBoeV9jbG9j ayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZkc2ktPnBkZXYtPmRldiwKKwkJCSJGYWlsZWQg dG8gc2V0IHBoeSBjbG9jayB0byAlbGQ6ICVkXG4iLCBwaHlfY2xvY2ssIHJldCk7CisJfQorCisJ LyogUmVzZXQgdGhlIERTSSBhbmQgYWxsIGl0cyBmaWZvcy4gKi8KKwlEU0lfUE9SVF9XUklURShD VFJMLAorCQkgICAgICAgRFNJX0NUUkxfU09GVF9SRVNFVF9DRkcgfAorCQkgICAgICAgRFNJX1BP UlRfQklUKENUUkxfUkVTRVRfRklGT1MpKTsKKworCURTSV9QT1JUX1dSSVRFKENUUkwsCisJCSAg ICAgICBEU0lfQ1RSTF9IU0RUX0VPVF9ESVNBQkxFIHwKKwkJICAgICAgIERTSV9DVFJMX1JYX0xQ RFRfRU9UX0RJU0FCTEUpOworCisJLyogQ2xlYXIgYWxsIHN0YXQgYml0cyBzbyB3ZSBzZWUgd2hh dCBoYXMgaGFwcGVuZWQgZHVyaW5nIGVuYWJsZS4gKi8KKwlEU0lfUE9SVF9XUklURShTVEFULCBE U0lfUE9SVF9SRUFEKFNUQVQpKTsKKworCS8qIFNldCBBRkUgQ1RSMDAvQ1RSMSB0byByZWxlYXNl IHBvd2VyZG93biBvZiBhbmFsb2cuICovCisJaWYgKGRzaS0+cG9ydCA9PSAwKSB7CisJCXUzMiBh ZmVjMCA9IChWQzRfU0VUX0ZJRUxEKDcsIERTSV9QSFlfQUZFQzBfUFRBVEFESikgfAorCQkJICAg ICBWQzRfU0VUX0ZJRUxEKDcsIERTSV9QSFlfQUZFQzBfQ1RBVEFESikpOworCisJCWlmIChkc2kt PmxhbmVzIDwgMikKKwkJCWFmZWMwIHw9IERTSTBfUEhZX0FGRUMwX1BEX0RMQU5FMTsKKworCQlp ZiAoIShkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPKSkKKwkJCWFmZWMwIHw9 IERTSTBfUEhZX0FGRUMwX1JFU0VUOworCisJCURTSV9QT1JUX1dSSVRFKFBIWV9BRkVDMCwgYWZl YzApOworCisJCURTSV9QT1JUX1dSSVRFKFBIWV9BRkVDMSwKKwkJCSAgICAgICBWQzRfU0VUX0ZJ RUxEKDYsICBEU0kwX1BIWV9BRkVDMV9JRFJfRExBTkUxKSB8CisJCQkgICAgICAgVkM0X1NFVF9G SUVMRCg2LCAgRFNJMF9QSFlfQUZFQzFfSURSX0RMQU5FMCkgfAorCQkJICAgICAgIFZDNF9TRVRf RklFTEQoNiwgIERTSTBfUEhZX0FGRUMxX0lEUl9DTEFORSkpOworCX0gZWxzZSB7CisJCXUzMiBh ZmVjMCA9IChWQzRfU0VUX0ZJRUxEKDcsIERTSV9QSFlfQUZFQzBfUFRBVEFESikgfAorCQkJICAg ICBWQzRfU0VUX0ZJRUxEKDcsIERTSV9QSFlfQUZFQzBfQ1RBVEFESikgfAorCQkJICAgICBWQzRf U0VUX0ZJRUxEKDYsIERTSTFfUEhZX0FGRUMwX0lEUl9DTEFORSkgfAorCQkJICAgICBWQzRfU0VU X0ZJRUxEKDYsIERTSTFfUEhZX0FGRUMwX0lEUl9ETEFORTApIHwKKwkJCSAgICAgVkM0X1NFVF9G SUVMRCg2LCBEU0kxX1BIWV9BRkVDMF9JRFJfRExBTkUxKSB8CisJCQkgICAgIFZDNF9TRVRfRklF TEQoNiwgRFNJMV9QSFlfQUZFQzBfSURSX0RMQU5FMikgfAorCQkJICAgICBWQzRfU0VUX0ZJRUxE KDYsIERTSTFfUEhZX0FGRUMwX0lEUl9ETEFORTMpKTsKKworCQlpZiAoZHNpLT5sYW5lcyA8IDQp CisJCQlhZmVjMCB8PSBEU0kxX1BIWV9BRkVDMF9QRF9ETEFORTM7CisJCWlmIChkc2ktPmxhbmVz IDwgMykKKwkJCWFmZWMwIHw9IERTSTFfUEhZX0FGRUMwX1BEX0RMQU5FMjsKKwkJaWYgKGRzaS0+ bGFuZXMgPCAyKQorCQkJYWZlYzAgfD0gRFNJMV9QSFlfQUZFQzBfUERfRExBTkUxOworCisJCWFm ZWMwIHw9IERTSTFfUEhZX0FGRUMwX1JFU0VUOworCisJCURTSV9QT1JUX1dSSVRFKFBIWV9BRkVD MCwgYWZlYzApOworCisJCURTSV9QT1JUX1dSSVRFKFBIWV9BRkVDMSwgMCk7CisKKwkJLyogQUZF QyByZXNldCBob2xkIHRpbWUgKi8KKwkJbWRlbGF5KDEpOworCX0KKworCXJldCA9IGNsa19wcmVw YXJlX2VuYWJsZShkc2ktPmVzY2FwZV9jbG9jayk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1Io IkZhaWxlZCB0byB0dXJuIG9uIERTSSBlc2NhcGUgY2xvY2s6ICVkXG4iLCByZXQpOworCQlyZXR1 cm47CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+cGxsX3BoeV9jbG9jayk7 CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byB0dXJuIG9uIERTSSBQTEw6ICVk XG4iLCByZXQpOworCQlyZXR1cm47CisJfQorCisJaHNfY2xvY2sgPSBjbGtfZ2V0X3JhdGUoZHNp LT5wbGxfcGh5X2Nsb2NrKTsKKworCS8qIFllcywgd2Ugc2V0IHRoZSBEU0kwUC9EU0kxUCBwaXhl bCBjbG9jayB0byB0aGUgYnl0ZSByYXRlLAorCSAqIG5vdCB0aGUgcGl4ZWwgY2xvY2sgcmF0ZS4g IERTSXhQIHRha2UgZnJvbSB0aGUgQVBIWSdzIGJ5dGUsCisJICogRERSMiwgb3IgRERSNCBjbG9j ayAod2UgdXNlIGJ5dGUpIGFuZCBmZWVkIGludG8gdGhlIFBWIGF0CisJICogdGhhdCByYXRlLiAg U2VwYXJhdGVseSwgYSB2YWx1ZSBkZXJpdmVkIGZyb20gUElYX0NMS19ESVYKKwkgKiBhbmQgSFNf Q0xLQyBpcyBmZWQgaW50byB0aGUgUFYgdG8gZGl2aWRlIGRvd24gdG8gdGhlIGFjdHVhbAorCSAq IHBpeGVsIGNsb2NrIGZvciBwdXNoaW5nIHBpeGVscyBpbnRvIERTSS4KKwkgKi8KKwlkc2lwX2Ns b2NrID0gcGh5X2Nsb2NrIC8gODsKKwlyZXQgPSBjbGtfc2V0X3JhdGUoZHNpLT5waXhlbF9jbG9j aywgZHNpcF9jbG9jayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBz ZXQgcGl4ZWwgY2xvY2sgdG8gJWxkSHo6ICVkXG4iLAorCQkJZHNpcF9jbG9jaywgcmV0KTsKKwl9 CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5waXhlbF9jbG9jayk7CisJaWYgKHJl dCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byB0dXJuIG9uIERTSSBwaXhlbCBjbG9jazogJWRc biIsIHJldCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBIb3cgbWFueSBucyBvbmUgRFNJIHVuaXQg aW50ZXJ2YWwgaXMuICBOb3RlIHRoYXQgdGhlIGNsb2NrCisJICogaXMgRERSLCBzbyB0aGVyZSdz IGFuIGV4dHJhIGRpdmlkZSBieSAyLgorCSAqLworCXVpX25zID0gRElWX1JPVU5EX1VQKDUwMDAw MDAwMCwgaHNfY2xvY2spOworCisJRFNJX1BPUlRfV1JJVEUoSFNfQ0xUMCwKKwkJICAgICAgIFZD NF9TRVRfRklFTEQoZHNpX2hzX3RpbWluZyh1aV9ucywgMjYyLCAwKSwKKwkJCQkgICAgIERTSV9I U19DTFQwX0NaRVJPKSB8CisJCSAgICAgICBWQzRfU0VUX0ZJRUxEKGRzaV9oc190aW1pbmcodWlf bnMsIDAsIDgpLAorCQkJCSAgICAgRFNJX0hTX0NMVDBfQ1BSRSkgfAorCQkgICAgICAgVkM0X1NF VF9GSUVMRChkc2lfaHNfdGltaW5nKHVpX25zLCAzOCwgMCksCisJCQkJICAgICBEU0lfSFNfQ0xU MF9DUFJFUCkpOworCisJRFNJX1BPUlRfV1JJVEUoSFNfQ0xUMSwKKwkJICAgICAgIFZDNF9TRVRf RklFTEQoZHNpX2hzX3RpbWluZyh1aV9ucywgNjAsIDApLAorCQkJCSAgICAgRFNJX0hTX0NMVDFf Q1RSQUlMKSB8CisJCSAgICAgICBWQzRfU0VUX0ZJRUxEKGRzaV9oc190aW1pbmcodWlfbnMsIDYw LCA1MiksCisJCQkJICAgICBEU0lfSFNfQ0xUMV9DUE9TVCkpOworCisJRFNJX1BPUlRfV1JJVEUo SFNfQ0xUMiwKKwkJICAgICAgIFZDNF9TRVRfRklFTEQoZHNpX2hzX3RpbWluZyh1aV9ucywgMTAw MDAwMCwgMCksCisJCQkJICAgICBEU0lfSFNfQ0xUMl9XVVApKTsKKworCURTSV9QT1JUX1dSSVRF KEhTX0RMVDMsCisJCSAgICAgICBWQzRfU0VUX0ZJRUxEKGRzaV9oc190aW1pbmcodWlfbnMsIDEw MCwgMCksCisJCQkJICAgICBEU0lfSFNfRExUM19FWElUKSB8CisJCSAgICAgICBWQzRfU0VUX0ZJ RUxEKGRzaV9oc190aW1pbmcodWlfbnMsIDEwNSwgNiksCisJCQkJICAgICBEU0lfSFNfRExUM19a RVJPKSB8CisJCSAgICAgICBWQzRfU0VUX0ZJRUxEKGRzaV9oc190aW1pbmcodWlfbnMsIDQwLCA0 KSwKKwkJCQkgICAgIERTSV9IU19ETFQzX1BSRSkpOworCisJRFNJX1BPUlRfV1JJVEUoSFNfRExU NCwKKwkJICAgICAgIFZDNF9TRVRfRklFTEQoZHNpX2hzX3RpbWluZyh1aV9ucywgbHB4ICogRVND X1RJTUVfTlMsIDApLAorCQkJCSAgICAgRFNJX0hTX0RMVDRfTFBYKSB8CisJCSAgICAgICBWQzRf U0VUX0ZJRUxEKG1heChkc2lfaHNfdGltaW5nKHVpX25zLCAwLCA4KSwKKwkJCQkJIGRzaV9oc190 aW1pbmcodWlfbnMsIDYwLCA0KSksCisJCQkJICAgICBEU0lfSFNfRExUNF9UUkFJTCkgfAorCQkg ICAgICAgVkM0X1NFVF9GSUVMRCgwLCBEU0lfSFNfRExUNF9BTkxBVCkpOworCisJRFNJX1BPUlRf V1JJVEUoSFNfRExUNSwgVkM0X1NFVF9GSUVMRChkc2lfaHNfdGltaW5nKHVpX25zLCAxMDAwLCA1 MDAwKSwKKwkJCQkJICAgICAgRFNJX0hTX0RMVDVfSU5JVCkpOworCisJRFNJX1BPUlRfV1JJVEUo SFNfRExUNiwKKwkJICAgICAgIFZDNF9TRVRfRklFTEQobHB4ICogNSwgRFNJX0hTX0RMVDZfVEFf R0VUKSB8CisJCSAgICAgICBWQzRfU0VUX0ZJRUxEKGxweCwgRFNJX0hTX0RMVDZfVEFfU1VSRSkg fAorCQkgICAgICAgVkM0X1NFVF9GSUVMRChscHggKiA0LCBEU0lfSFNfRExUNl9UQV9HTykgfAor CQkgICAgICAgVkM0X1NFVF9GSUVMRChscHgsIERTSV9IU19ETFQ2X0xQX0xQWCkpOworCisJRFNJ X1BPUlRfV1JJVEUoSFNfRExUNywKKwkJICAgICAgIFZDNF9TRVRfRklFTEQoZHNpX2VzY190aW1p bmcoMTAwMDAwMCksCisJCQkJICAgICBEU0lfSFNfRExUN19MUF9XVVApKTsKKworCURTSV9QT1JU X1dSSVRFKFBIWUMsCisJCSAgICAgICBEU0lfUEhZQ19ETEFORTBfRU5BQkxFIHwKKwkJICAgICAg IChkc2ktPmxhbmVzID49IDIgPyBEU0lfUEhZQ19ETEFORTFfRU5BQkxFIDogMCkgfAorCQkgICAg ICAgKGRzaS0+bGFuZXMgPj0gMyA/IERTSV9QSFlDX0RMQU5FMl9FTkFCTEUgOiAwKSB8CisJCSAg ICAgICAoZHNpLT5sYW5lcyA+PSA0ID8gRFNJX1BIWUNfRExBTkUzX0VOQUJMRSA6IDApIHwKKwkJ ICAgICAgIERTSV9QT1JUX0JJVChQSFlDX0NMQU5FX0VOQUJMRSkgfAorCQkgICAgICAgKChkc2kt Pm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9DTE9DS19OT05fQ09OVElOVU9VUykgPworCQkJMCA6IERT SV9QT1JUX0JJVChQSFlDX0hTX0NMS19DT05USU5VT1VTKSkgfAorCQkgICAgICAgKGRzaS0+cG9y dCA9PSAwID8KKwkJCVZDNF9TRVRfRklFTEQobHB4IC0gMSwgRFNJMF9QSFlDX0VTQ19DTEtfTFBE VCkgOgorCQkJVkM0X1NFVF9GSUVMRChscHggLSAxLCBEU0kxX1BIWUNfRVNDX0NMS19MUERUKSkp OworCisJRFNJX1BPUlRfV1JJVEUoQ1RSTCwKKwkJICAgICAgIERTSV9QT1JUX1JFQUQoQ1RSTCkg fAorCQkgICAgICAgRFNJX0NUUkxfQ0FMX0JZVEUpOworCisJLyogSFMgdGltZW91dCBpbiBIUyBj bG9jayBjeWNsZXM6IGRpc2FibGVkLiAqLworCURTSV9QT1JUX1dSSVRFKEhTVFhfVE9fQ05ULCAw KTsKKwkvKiBMUCByZWNlaXZlIHRpbWVvdXQgaW4gSFMgY2xvY2tzLiAqLworCURTSV9QT1JUX1dS SVRFKExQUlhfVE9fQ05ULCAweGZmZmZmZik7CisJLyogQnVzIHR1cm5hcm91bmQgdGltZW91dCAq LworCURTSV9QT1JUX1dSSVRFKFRBX1RPX0NOVCwgMTAwMDAwKTsKKwkvKiBEaXNwbGF5IHJlc2V0 IHNlcXVlbmNlIHRpbWVvdXQgKi8KKwlEU0lfUE9SVF9XUklURShQUl9UT19DTlQsIDEwMDAwMCk7 CisKKwlpZiAoZHNpLT5tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFTykgeworCQlEU0lf UE9SVF9XUklURShESVNQMF9DVFJMLAorCQkJICAgICAgIFZDNF9TRVRfRklFTEQoZGl2aWRlciwg RFNJX0RJU1AwX1BJWF9DTEtfRElWKSB8CisJCQkgICAgICAgVkM0X1NFVF9GSUVMRChmb3JtYXQs IERTSV9ESVNQMF9QRk9STUFUKSB8CisJCQkgICAgICAgVkM0X1NFVF9GSUVMRChEU0lfRElTUDBf TFBfU1RPUF9QRVJGUkFNRSwKKwkJCQkJICAgICBEU0lfRElTUDBfTFBfU1RPUF9DVFJMKSB8CisJ CQkgICAgICAgRFNJX0RJU1AwX1NUX0VORCB8CisJCQkgICAgICAgRFNJX0RJU1AwX0VOQUJMRSk7 CisJfSBlbHNlIHsKKwkJRFNJX1BPUlRfV1JJVEUoRElTUDBfQ1RSTCwKKwkJCSAgICAgICBEU0lf RElTUDBfQ09NTUFORF9NT0RFIHwKKwkJCSAgICAgICBEU0lfRElTUDBfRU5BQkxFKTsKKwl9CisK KwkvKiBTZXQgdXAgRElTUDEgZm9yIHRyYW5zZmVycmluZyBsb25nIGNvbW1hbmQgcGF5bG9hZHMg dGhyb3VnaAorCSAqIHRoZSBwaXhmaWZvLgorCSAqLworCURTSV9QT1JUX1dSSVRFKERJU1AxX0NU UkwsCisJCSAgICAgICBWQzRfU0VUX0ZJRUxEKERTSV9ESVNQMV9QRk9STUFUXzMyQklUX0xFLAor CQkJCSAgICAgRFNJX0RJU1AxX1BGT1JNQVQpIHwKKwkJICAgICAgIERTSV9ESVNQMV9FTkFCTEUp OworCisJLyogVW5nYXRlIHRoZSBibG9jay4gKi8KKwlpZiAoZHNpLT5wb3J0ID09IDApCisJCURT SV9QT1JUX1dSSVRFKENUUkwsIERTSV9QT1JUX1JFQUQoQ1RSTCkgfCBEU0kwX0NUUkxfQ1RSTDAp OworCWVsc2UKKwkJRFNJX1BPUlRfV1JJVEUoQ1RSTCwgRFNJX1BPUlRfUkVBRChDVFJMKSB8IERT STFfQ1RSTF9FTik7CisKKwkvKiBCcmluZyBBRkUgb3V0IG9mIHJlc2V0LiAqLworCWlmIChkc2kt PnBvcnQgPT0gMCkgeworCX0gZWxzZSB7CisJCURTSV9QT1JUX1dSSVRFKFBIWV9BRkVDMCwKKwkJ CSAgICAgICBEU0lfUE9SVF9SRUFEKFBIWV9BRkVDMCkgJgorCQkJICAgICAgIH5EU0kxX1BIWV9B RkVDMF9SRVNFVCk7CisJfQorCisJdmM0X2RzaV91bHBzKGRzaSwgZmFsc2UpOworCisJaWYgKGRl YnVnX2R1bXBfcmVncykgeworCQlEUk1fSU5GTygiRFNJIHJlZ3MgYWZ0ZXI6XG4iKTsKKwkJdmM0 X2RzaV9kdW1wX3JlZ3MoZHNpKTsKKwl9CisKKwlyZXQgPSBkcm1fcGFuZWxfZW5hYmxlKGRzaS0+ cGFuZWwpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJQYW5lbCBmYWlsZWQgdG8gZW5hYmxl XG4iKTsKKwkJZHJtX3BhbmVsX3VucHJlcGFyZShkc2ktPnBhbmVsKTsKKwkJcmV0dXJuOworCX0K K30KKworc3RhdGljIHNzaXplX3QgdmM0X2RzaV9ob3N0X3RyYW5zZmVyKHN0cnVjdCBtaXBpX2Rz aV9ob3N0ICpob3N0LAorCQkJCSAgICAgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnKQor eworCXN0cnVjdCB2YzRfZHNpICpkc2kgPSBob3N0X3RvX2RzaShob3N0KTsKKwlzdHJ1Y3QgbWlw aV9kc2lfcGFja2V0IHBhY2tldDsKKwl1MzIgcGt0aCA9IDAsIHBrdGMgPSAwOworCWludCBpLCBy ZXQ7CisJYm9vbCBpc19sb25nID0gbWlwaV9kc2lfcGFja2V0X2Zvcm1hdF9pc19sb25nKG1zZy0+ dHlwZSk7CisJdTMyIGNtZF9maWZvX2xlbiA9IDAsIHBpeF9maWZvX2xlbiA9IDA7CisKKwltaXBp X2RzaV9jcmVhdGVfcGFja2V0KCZwYWNrZXQsIG1zZyk7CisKKwlwa3RoIHw9IFZDNF9TRVRfRklF TEQocGFja2V0LmhlYWRlclswXSwgRFNJX1RYUEtUMUhfQkNfRFQpOworCXBrdGggfD0gVkM0X1NF VF9GSUVMRChwYWNrZXQuaGVhZGVyWzFdIHwKKwkJCSAgICAgIChwYWNrZXQuaGVhZGVyWzJdIDw8 IDgpLAorCQkJICAgICAgRFNJX1RYUEtUMUhfQkNfUEFSQU0pOworCWlmIChpc19sb25nKSB7CisJ CS8qIERpdmlkZSBkYXRhIGFjcm9zcyB0aGUgdmFyaW91cyBGSUZPcyB3ZSBoYXZlIGF2YWlsYWJs ZS4KKwkJICogVGhlIGNvbW1hbmQgRklGTyB0YWtlcyBieXRlLW9yaWVudGVkIGRhdGEsIGJ1dCBp cyBvZgorCQkgKiBsaW1pdGVkIHNpemUuIFRoZSBwaXhlbCBGSUZPIChuZXZlciBhY3R1YWxseSB1 c2VkIGZvcgorCQkgKiBwaXhlbCBkYXRhIGluIHJlYWxpdHkpIGlzIHdvcmQgb3JpZW50ZWQsIGFu ZCBzdWJzdGFudGlhbGx5CisJCSAqIGxhcmdlci4gU28sIHdlIHVzZSB0aGUgcGl4ZWwgRklGTyBm b3IgbW9zdCBvZiB0aGUgZGF0YSwKKwkJICogc2VuZGluZyB0aGUgcmVzaWR1YWwgYnl0ZXMgaW4g dGhlIGNvbW1hbmQgRklGTyBhdCB0aGUgc3RhcnQuCisJCSAqCisJCSAqIFdpdGggdGhpcyBhcnJh bmdlbWVudCwgdGhlIGNvbW1hbmQgRklGTyB3aWxsIG5ldmVyIGdldCBmdWxsLgorCQkgKi8KKwkJ aWYgKHBhY2tldC5wYXlsb2FkX2xlbmd0aCA8PSAxNikgeworCQkJY21kX2ZpZm9fbGVuID0gcGFj a2V0LnBheWxvYWRfbGVuZ3RoOworCQkJcGl4X2ZpZm9fbGVuID0gMDsKKwkJfSBlbHNlIHsKKwkJ CWNtZF9maWZvX2xlbiA9IChwYWNrZXQucGF5bG9hZF9sZW5ndGggJQorCQkJCQlEU0lfUElYX0ZJ Rk9fV0lEVEgpOworCQkJcGl4X2ZpZm9fbGVuID0gKChwYWNrZXQucGF5bG9hZF9sZW5ndGggLSBj bWRfZmlmb19sZW4pIC8KKwkJCQkJRFNJX1BJWF9GSUZPX1dJRFRIKTsKKwkJfQorCisJCVdBUk5f T05fT05DRShwaXhfZmlmb19sZW4gPj0gRFNJX1BJWF9GSUZPX0RFUFRIKTsKKworCQlwa3RoIHw9 IFZDNF9TRVRfRklFTEQoY21kX2ZpZm9fbGVuLCBEU0lfVFhQS1QxSF9CQ19DTURGSUZPKTsKKwl9 CisKKwlpZiAobXNnLT5yeF9sZW4pIHsKKwkJcGt0YyB8PSBWQzRfU0VUX0ZJRUxEKERTSV9UWFBL VDFDX0NNRF9DVFJMX1JYLAorCQkJCSAgICAgIERTSV9UWFBLVDFDX0NNRF9DVFJMKTsKKwl9IGVs c2UgeworCQlwa3RjIHw9IFZDNF9TRVRfRklFTEQoRFNJX1RYUEtUMUNfQ01EX0NUUkxfVFgsCisJ CQkJICAgICAgRFNJX1RYUEtUMUNfQ01EX0NUUkwpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBj bWRfZmlmb19sZW47IGkrKykKKwkJRFNJX1BPUlRfV1JJVEUoVFhQS1RfQ01EX0ZJRk8sIHBhY2tl dC5wYXlsb2FkW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgcGl4X2ZpZm9fbGVuOyBpKyspIHsKKwkJ Y29uc3QgdTggKnBpeCA9IHBhY2tldC5wYXlsb2FkICsgY21kX2ZpZm9fbGVuICsgaSAqIDQ7CisK KwkJRFNJX1BPUlRfV1JJVEUoVFhQS1RfUElYX0ZJRk8sCisJCQkgICAgICAgcGl4WzBdIHwKKwkJ CSAgICAgICBwaXhbMV0gPDwgOCB8CisJCQkgICAgICAgcGl4WzJdIDw8IDE2IHwKKwkJCSAgICAg ICBwaXhbM10gPDwgMjQpOworCX0KKworCWlmIChtc2ctPmZsYWdzICYgTUlQSV9EU0lfTVNHX1VT RV9MUE0pCisJCXBrdGMgfD0gRFNJX1RYUEtUMUNfQ01EX01PREVfTFA7CisJaWYgKGlzX2xvbmcp CisJCXBrdGMgfD0gRFNJX1RYUEtUMUNfQ01EX1RZUEVfTE9ORzsKKworCS8qIFNlbmQgb25lIGNv cHkgb2YgdGhlIHBhY2tldC4gIExhcmdlciByZXBlYXRzIGFyZSB1c2VkIGZvciBwaXhlbAorCSAq IGRhdGEgaW4gY29tbWFuZCBtb2RlLgorCSAqLworCXBrdGMgfD0gVkM0X1NFVF9GSUVMRCgxLCBE U0lfVFhQS1QxQ19DTURfUkVQRUFUKTsKKworCXBrdGMgfD0gRFNJX1RYUEtUMUNfQ01EX0VOOwor CWlmIChwaXhfZmlmb19sZW4pIHsKKwkJcGt0YyB8PSBWQzRfU0VUX0ZJRUxEKERTSV9UWFBLVDFD X0RJU1BMQVlfTk9fU0VDT05EQVJZLAorCQkJCSAgICAgIERTSV9UWFBLVDFDX0RJU1BMQVlfTk8p OworCX0gZWxzZSB7CisJCXBrdGMgfD0gVkM0X1NFVF9GSUVMRChEU0lfVFhQS1QxQ19ESVNQTEFZ X05PX1NIT1JULAorCQkJCSAgICAgIERTSV9UWFBLVDFDX0RJU1BMQVlfTk8pOworCX0KKworCS8q IEVuYWJsZSB0aGUgYXBwcm9wcmlhdGUgaW50ZXJydXB0IGZvciB0aGUgdHJhbnNmZXIgY29tcGxl dGlvbi4gKi8KKwlkc2ktPnhmZXJfcmVzdWx0ID0gMDsKKwlyZWluaXRfY29tcGxldGlvbigmZHNp LT54ZmVyX2NvbXBsZXRpb24pOworCURTSV9QT1JUX1dSSVRFKElOVF9TVEFULCBEU0kxX0lOVF9U WFBLVDFfRE9ORSB8IERTSTFfSU5UX1BIWV9ESVJfUlRGKTsKKwlpZiAobXNnLT5yeF9sZW4pIHsK KwkJRFNJX1BPUlRfV1JJVEUoSU5UX0VOLCAoRFNJMV9JTlRFUlJVUFRTX0FMV0FZU19FTkFCTEVE IHwKKwkJCQkJRFNJMV9JTlRfUEhZX0RJUl9SVEYpKTsKKwl9IGVsc2UgeworCQlEU0lfUE9SVF9X UklURShJTlRfRU4sIChEU0kxX0lOVEVSUlVQVFNfQUxXQVlTX0VOQUJMRUQgfAorCQkJCQlEU0kx X0lOVF9UWFBLVDFfRE9ORSkpOworCX0KKworCS8qIFNlbmQgdGhlIHBhY2tldC4gKi8KKwlEU0lf UE9SVF9XUklURShUWFBLVDFILCBwa3RoKTsKKwlEU0lfUE9SVF9XUklURShUWFBLVDFDLCBwa3Rj KTsKKworCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZkc2ktPnhmZXJfY29tcGxl dGlvbiwKKwkJCQkJIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpKSB7CisJCWRldl9lcnIoJmRzaS0+ cGRldi0+ZGV2LCAidHJhbnNmZXIgaW50ZXJydXB0IHdhaXQgdGltZW91dCIpOworCQlkZXZfZXJy KCZkc2ktPnBkZXYtPmRldiwgImluc3RhdDogMHglMDh4XG4iLAorCQkJRFNJX1BPUlRfUkVBRChJ TlRfU1RBVCkpOworCQlyZXQgPSAtRVRJTUVET1VUOworCX0gZWxzZSB7CisJCXJldCA9IGRzaS0+ eGZlcl9yZXN1bHQ7CisJfQorCisJRFNJX1BPUlRfV1JJVEUoSU5UX0VOLCBEU0kxX0lOVEVSUlVQ VFNfQUxXQVlTX0VOQUJMRUQpOworCisJaWYgKHJldCkKKwkJZ290byByZXNldF9maWZvX2FuZF9y ZXR1cm47CisKKwlpZiAocmV0ID09IDAgJiYgbXNnLT5yeF9sZW4pIHsKKwkJdTMyIHJ4cGt0MWgg PSBEU0lfUE9SVF9SRUFEKFJYUEtUMUgpOworCQl1OCAqbXNnX3J4ID0gbXNnLT5yeF9idWY7CisK KwkJaWYgKHJ4cGt0MWggJiBEU0lfUlhQS1QxSF9QS1RfVFlQRV9MT05HKSB7CisJCQl1MzIgcnhs ZW4gPSBWQzRfR0VUX0ZJRUxEKHJ4cGt0MWgsCisJCQkJCQkgIERTSV9SWFBLVDFIX0JDX1BBUkFN KTsKKworCQkJaWYgKHJ4bGVuICE9IG1zZy0+cnhfbGVuKSB7CisJCQkJRFJNX0VSUk9SKCJEU0kg cmV0dXJuZWQgJWRiLCBleHBlY3RpbmcgJWRiXG4iLAorCQkJCQkgIHJ4bGVuLCAoaW50KW1zZy0+ cnhfbGVuKTsKKwkJCQlyZXQgPSAtRU5YSU87CisJCQkJZ290byByZXNldF9maWZvX2FuZF9yZXR1 cm47CisJCQl9CisKKwkJCWZvciAoaSA9IDA7IGkgPCBtc2ctPnJ4X2xlbjsgaSsrKQorCQkJCW1z Z19yeFtpXSA9IERTSV9SRUFEKERTSTFfUlhQS1RfRklGTyk7CisJCX0gZWxzZSB7CisJCQkvKiBG SU5JU0hNRTogSGFuZGxlIEFXRVIgKi8KKworCQkJbXNnX3J4WzBdID0gVkM0X0dFVF9GSUVMRChy eHBrdDFoLAorCQkJCQkJICBEU0lfUlhQS1QxSF9TSE9SVF8wKTsKKwkJCWlmIChtc2ctPnJ4X2xl biA+IDEpIHsKKwkJCQltc2dfcnhbMV0gPSBWQzRfR0VUX0ZJRUxEKHJ4cGt0MWgsCisJCQkJCQkJ ICBEU0lfUlhQS1QxSF9TSE9SVF8xKTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiByZXQ7CisK K3Jlc2V0X2ZpZm9fYW5kX3JldHVybjoKKwlEUk1fRVJST1IoIkRTSSB0cmFuc2ZlciBmYWlsZWQs IHJlc2V0dGluZzogJWRcbiIsIHJldCk7CisKKwlEU0lfUE9SVF9XUklURShUWFBLVDFDLCBEU0lf UE9SVF9SRUFEKFRYUEtUMUMpICYgfkRTSV9UWFBLVDFDX0NNRF9FTik7CisJdWRlbGF5KDEpOwor CURTSV9QT1JUX1dSSVRFKENUUkwsCisJCSAgICAgICBEU0lfUE9SVF9SRUFEKENUUkwpIHwKKwkJ ICAgICAgIERTSV9QT1JUX0JJVChDVFJMX1JFU0VUX0ZJRk9TKSk7CisKKwlEU0lfUE9SVF9XUklU RShUWFBLVDFDLCAwKTsKKwlEU0lfUE9SVF9XUklURShJTlRfRU4sIERTSTFfSU5URVJSVVBUU19B TFdBWVNfRU5BQkxFRCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2YzRfZHNpX2hv c3RfYXR0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LAorCQkJICAgICAgIHN0cnVjdCBt aXBpX2RzaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgdmM0X2RzaSAqZHNpID0gaG9zdF90 b19kc2koaG9zdCk7CisJaW50IHJldCA9IDA7CisKKwlkc2ktPmxhbmVzID0gZGV2aWNlLT5sYW5l czsKKwlkc2ktPmNoYW5uZWwgPSBkZXZpY2UtPmNoYW5uZWw7CisJZHNpLT5mb3JtYXQgPSBkZXZp Y2UtPmZvcm1hdDsKKwlkc2ktPm1vZGVfZmxhZ3MgPSBkZXZpY2UtPm1vZGVfZmxhZ3M7CisKKwlp ZiAoIShkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPKSkgeworCQlkZXZfZXJy KCZkc2ktPnBkZXYtPmRldiwKKwkJCSJPbmx5IFZJREVPIG1vZGUgcGFuZWxzIHN1cHBvcnRlZCBj dXJyZW50bHkuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZHNpLT5wYW5lbCA9IG9mX2RybV9m aW5kX3BhbmVsKGRldmljZS0+ZGV2Lm9mX25vZGUpOworCWlmICghZHNpLT5wYW5lbCkKKwkJcmV0 dXJuIDA7CisKKwlyZXQgPSBkcm1fcGFuZWxfYXR0YWNoKGRzaS0+cGFuZWwsIGRzaS0+Y29ubmVj dG9yKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwlkcm1faGVscGVyX2hwZF9p cnFfZXZlbnQoZHNpLT5jb25uZWN0b3ItPmRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCB2YzRfZHNpX2hvc3RfZGV0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LAorCQkJ ICAgICAgIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgdmM0X2Rz aSAqZHNpID0gaG9zdF90b19kc2koaG9zdCk7CisKKwlpZiAoZHNpLT5wYW5lbCkgeworCQlpbnQg cmV0ID0gZHJtX3BhbmVsX2RldGFjaChkc2ktPnBhbmVsKTsKKworCQlpZiAocmV0KQorCQkJcmV0 dXJuIHJldDsKKworCQlkc2ktPnBhbmVsID0gTlVMTDsKKworCQlkcm1faGVscGVyX2hwZF9pcnFf ZXZlbnQoZHNpLT5jb25uZWN0b3ItPmRldik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfaG9zdF9vcHMgdmM0X2RzaV9ob3N0X29wcyA9IHsKKwku YXR0YWNoID0gdmM0X2RzaV9ob3N0X2F0dGFjaCwKKwkuZGV0YWNoID0gdmM0X2RzaV9ob3N0X2Rl dGFjaCwKKwkudHJhbnNmZXIgPSB2YzRfZHNpX2hvc3RfdHJhbnNmZXIsCit9OworCitzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyB2YzRfZHNpX2VuY29kZXJfaGVs cGVyX2Z1bmNzID0geworCS5kaXNhYmxlID0gdmM0X2RzaV9lbmNvZGVyX2Rpc2FibGUsCisJLmVu YWJsZSA9IHZjNF9kc2lfZW5jb2Rlcl9lbmFibGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0 IG9mX2RldmljZV9pZCB2YzRfZHNpX2R0X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJi cmNtLGJjbTI4MzUtZHNpMSIsICh2b2lkICopKHVpbnRwdHJfdCkxIH0sCisJe30KK307CisKK3N0 YXRpYyB2b2lkIGRzaV9oYW5kbGVfZXJyb3Ioc3RydWN0IHZjNF9kc2kgKmRzaSwKKwkJCSAgICAg aXJxcmV0dXJuX3QgKnJldCwgdTMyIHN0YXQsIHUzMiBiaXQsCisJCQkgICAgIGNvbnN0IGNoYXIg KnR5cGUpCit7CisJaWYgKCEoc3RhdCAmIGJpdCkpCisJCXJldHVybjsKKworCURSTV9FUlJPUigi RFNJJWQ6ICVzIGVycm9yXG4iLCBkc2ktPnBvcnQsIHR5cGUpOworCSpyZXQgPSBJUlFfSEFORExF RDsKK30KKworc3RhdGljIGlycXJldHVybl90IHZjNF9kc2lfaXJxX2hhbmRsZXIoaW50IGlycSwg dm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgdmM0X2RzaSAqZHNpID0gZGF0YTsKKwl1MzIgc3RhdCA9 IERTSV9QT1JUX1JFQUQoSU5UX1NUQVQpOworCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOwor CisJRFNJX1BPUlRfV1JJVEUoSU5UX1NUQVQsIHN0YXQpOworCisJZHNpX2hhbmRsZV9lcnJvcihk c2ksICZyZXQsIHN0YXQsCisJCQkgRFNJMV9JTlRfRVJSX1NZTkNfRVNDLCAiTFBEVCBzeW5jIik7 CisJZHNpX2hhbmRsZV9lcnJvcihkc2ksICZyZXQsIHN0YXQsCisJCQkgRFNJMV9JTlRfRVJSX0NP TlRST0wsICJkYXRhIGxhbmUgMCBzZXF1ZW5jZSIpOworCWRzaV9oYW5kbGVfZXJyb3IoZHNpLCAm cmV0LCBzdGF0LAorCQkJIERTSTFfSU5UX0VSUl9DT05UX0xQMCwgIkxQMCBjb250ZW50aW9uIik7 CisJZHNpX2hhbmRsZV9lcnJvcihkc2ksICZyZXQsIHN0YXQsCisJCQkgRFNJMV9JTlRfRVJSX0NP TlRfTFAxLCAiTFAxIGNvbnRlbnRpb24iKTsKKwlkc2lfaGFuZGxlX2Vycm9yKGRzaSwgJnJldCwg c3RhdCwKKwkJCSBEU0kxX0lOVF9IU1RYX1RPLCAiSFNUWCB0aW1lb3V0Iik7CisJZHNpX2hhbmRs ZV9lcnJvcihkc2ksICZyZXQsIHN0YXQsCisJCQkgRFNJMV9JTlRfTFBSWF9UTywgIkxQUlggdGlt ZW91dCIpOworCWRzaV9oYW5kbGVfZXJyb3IoZHNpLCAmcmV0LCBzdGF0LAorCQkJIERTSTFfSU5U X1RBX1RPLCAidHVybmFyb3VuZCB0aW1lb3V0Iik7CisJZHNpX2hhbmRsZV9lcnJvcihkc2ksICZy ZXQsIHN0YXQsCisJCQkgRFNJMV9JTlRfUFJfVE8sICJwZXJpcGhlcmFsIHJlc2V0IHRpbWVvdXQi KTsKKworCWlmIChzdGF0ICYgKERTSTFfSU5UX1RYUEtUMV9ET05FIHwgRFNJMV9JTlRfUEhZX0RJ Ul9SVEYpKSB7CisJCWNvbXBsZXRlKCZkc2ktPnhmZXJfY29tcGxldGlvbik7CisJCXJldCA9IElS UV9IQU5ETEVEOworCX0gZWxzZSBpZiAoc3RhdCAmIERTSTFfSU5UX0hTVFhfVE8pIHsKKwkJY29t cGxldGUoJmRzaS0+eGZlcl9jb21wbGV0aW9uKTsKKwkJZHNpLT54ZmVyX3Jlc3VsdCA9IC1FVElN RURPVVQ7CisJCXJldCA9IElSUV9IQU5ETEVEOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8q KgorICogRXhwb3NlcyBjbG9ja3MgZ2VuZXJhdGVkIGJ5IHRoZSBhbmFsb2cgUEhZIHRoYXQgYXJl IGNvbnN1bWVkIGJ5CisgKiBDUFJNQU4gKGNsay1iY20yODM1LmMpLgorICovCitzdGF0aWMgaW50 Cit2YzRfZHNpX2luaXRfcGh5X2Nsb2NrcyhzdHJ1Y3QgdmM0X2RzaSAqZHNpKQoreworCXN0cnVj dCBkZXZpY2UgKmRldiA9ICZkc2ktPnBkZXYtPmRldjsKKwljb25zdCBjaGFyICpwYXJlbnRfbmFt ZSA9IF9fY2xrX2dldF9uYW1lKGRzaS0+cGxsX3BoeV9jbG9jayk7CisJc3RhdGljIGNvbnN0IHN0 cnVjdCB7CisJCWNvbnN0IGNoYXIgKmRzaTBfbmFtZSwgKmRzaTFfbmFtZTsKKwkJaW50IGRpdjsK Kwl9IHBoeV9jbG9ja3NbXSA9IHsKKwkJeyAiZHNpMF9ieXRlIiwgImRzaTFfYnl0ZSIsIDggfSwK KwkJeyAiZHNpMF9kZHIyIiwgImRzaTFfZGRyMiIsIDQgfSwKKwkJeyAiZHNpMF9kZHIiLCAiZHNp MV9kZHIiLCAyIH0sCisJfTsKKwlpbnQgaTsKKworCWRzaS0+Y2xrX29uZWNlbGwgPSBkZXZtX2t6 YWxsb2MoZGV2LAorCQkJCQlzaXplb2YoKmRzaS0+Y2xrX29uZWNlbGwpICsKKwkJCQkJQVJSQVlf U0laRShwaHlfY2xvY2tzKSAqCisJCQkJCXNpemVvZihzdHJ1Y3QgY2xrX2h3ICopLAorCQkJCQlH RlBfS0VSTkVMKTsKKwlpZiAoIWRzaS0+Y2xrX29uZWNlbGwpCisJCXJldHVybiAtRU5PTUVNOwor CWRzaS0+Y2xrX29uZWNlbGwtPm51bSA9IEFSUkFZX1NJWkUocGh5X2Nsb2Nrcyk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgQVJSQVlfU0laRShwaHlfY2xvY2tzKTsgaSsrKSB7CisJCXN0cnVjdCBjbGtf Zml4ZWRfZmFjdG9yICpmaXggPSAmZHNpLT5waHlfY2xvY2tzW2ldOworCQlzdHJ1Y3QgY2xrX2lu aXRfZGF0YSBpbml0OworCQlpbnQgcmV0OworCisJCS8qIFdlIGp1c3QgdXNlIGNvcmUgZml4ZWQg ZmFjdG9yIGNsb2NrIG9wcyBmb3IgdGhlIFBIWQorCQkgKiBjbG9ja3MuICBUaGUgY2xvY2tzIGFy ZSBhY3R1YWxseSBnYXRlZCBieSB0aGUKKwkJICogUEhZX0FGRUMwX0REUkNMS19FTiBiaXRzLCB3 aGljaCB3ZSBzaG91bGQgYmUKKwkJICogc2V0dGluZyBpZiB3ZSB1c2UgdGhlIEREUi9ERFIyIGNs b2Nrcy4gIEhvd2V2ZXIsCisJCSAqIHZjNF9kc2lfZW5jb2Rlcl9lbmFibGUoKSBpcyBzZXR0aW5n IHVwIGJvdGggQUZFQzAsCisJCSAqIHNldHRpbmcgYm90aCBvdXIgcGFyZW50IERTSSBQTEwncyBy YXRlIGFuZCB0aGlzCisJCSAqIGNsb2NrJ3MgcmF0ZSwgc28gaXQga25vd3MgaWYgRERSL0REUjIg YXJlIGdvaW5nIHRvCisJCSAqIGJlIHVzZWQgYW5kIGNvdWxkIGVuYWJsZSB0aGUgZ2F0ZXMgaXRz ZWxmLgorCQkgKi8KKwkJZml4LT5tdWx0ID0gMTsKKwkJZml4LT5kaXYgPSBwaHlfY2xvY2tzW2ld LmRpdjsKKwkJZml4LT5ody5pbml0ID0gJmluaXQ7CisKKwkJbWVtc2V0KCZpbml0LCAwLCBzaXpl b2YoaW5pdCkpOworCQlpbml0LnBhcmVudF9uYW1lcyA9ICZwYXJlbnRfbmFtZTsKKwkJaW5pdC5u dW1fcGFyZW50cyA9IDE7CisJCWlmIChkc2ktPnBvcnQgPT0gMSkKKwkJCWluaXQubmFtZSA9IHBo eV9jbG9ja3NbaV0uZHNpMV9uYW1lOworCQllbHNlCisJCQlpbml0Lm5hbWUgPSBwaHlfY2xvY2tz W2ldLmRzaTBfbmFtZTsKKwkJaW5pdC5vcHMgPSAmY2xrX2ZpeGVkX2ZhY3Rvcl9vcHM7CisKKwkJ cmV0ID0gZGV2bV9jbGtfaHdfcmVnaXN0ZXIoZGV2LCAmZml4LT5odyk7CisJCWlmIChyZXQpCisJ CQlyZXR1cm4gcmV0OworCisJCWRzaS0+Y2xrX29uZWNlbGwtPmh3c1tpXSA9ICZmaXgtPmh3Owor CX0KKworCXJldHVybiBvZl9jbGtfYWRkX2h3X3Byb3ZpZGVyKGRldi0+b2Zfbm9kZSwKKwkJCQkg ICAgICBvZl9jbGtfaHdfb25lY2VsbF9nZXQsCisJCQkJICAgICAgZHNpLT5jbGtfb25lY2VsbCk7 Cit9CisKK3N0YXRpYyBpbnQgdmM0X2RzaV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0 IGRldmljZSAqbWFzdGVyLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJt ID0gZGV2X2dldF9kcnZkYXRhKG1hc3Rlcik7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3Zj NF9kZXYoZHJtKTsKKwlzdHJ1Y3QgdmM0X2RzaSAqZHNpOworCXN0cnVjdCB2YzRfZHNpX2VuY29k ZXIgKnZjNF9kc2lfZW5jb2RlcjsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsK KwlkbWFfY2FwX21hc2tfdCBkbWFfbWFzazsKKwlpbnQgcmV0OworCisJZHNpID0gZGV2bV9remFs bG9jKGRldiwgc2l6ZW9mKCpkc2kpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRzaSkKKwkJcmV0dXJu IC1FTk9NRU07CisKKwltYXRjaCA9IG9mX21hdGNoX2RldmljZSh2YzRfZHNpX2R0X21hdGNoLCBk ZXYpOworCWlmICghbWF0Y2gpCisJCXJldHVybiAtRU5PREVWOworCisJZHNpLT5wb3J0ID0gKHVp bnRwdHJfdCltYXRjaC0+ZGF0YTsKKworCXZjNF9kc2lfZW5jb2RlciA9IGRldm1fa3phbGxvYyhk ZXYsIHNpemVvZigqdmM0X2RzaV9lbmNvZGVyKSwKKwkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJ aWYgKCF2YzRfZHNpX2VuY29kZXIpCisJCXJldHVybiAtRU5PTUVNOworCXZjNF9kc2lfZW5jb2Rl ci0+YmFzZS50eXBlID0gVkM0X0VOQ09ERVJfVFlQRV9EU0kxOworCXZjNF9kc2lfZW5jb2Rlci0+ ZHNpID0gZHNpOworCWRzaS0+ZW5jb2RlciA9ICZ2YzRfZHNpX2VuY29kZXItPmJhc2UuYmFzZTsK KworCWRzaS0+cGRldiA9IHBkZXY7CisJZHNpLT5yZWdzID0gdmM0X2lvcmVtYXBfcmVncyhwZGV2 LCAwKTsKKwlpZiAoSVNfRVJSKGRzaS0+cmVncykpCisJCXJldHVybiBQVFJfRVJSKGRzaS0+cmVn cyk7CisKKwlpZiAoRFNJX1BPUlRfUkVBRChJRCkgIT0gRFNJX0lEX1ZBTFVFKSB7CisJCWRldl9l cnIoZGV2LCAiUG9ydCByZXR1cm5lZCAweCUwOHggZm9yIElEIGluc3RlYWQgb2YgMHglMDh4XG4i LAorCQkJRFNJX1BPUlRfUkVBRChJRCksIERTSV9JRF9WQUxVRSk7CisJCXJldHVybiAtRU5PREVW OworCX0KKworCS8qIERTSTEgaGFzIGEgYnJva2VuIEFYSSBzbGF2ZSB0aGF0IGRvZXNuJ3QgcmVz cG9uZCB0byB3cml0ZXMKKwkgKiBmcm9tIHRoZSBBUk0uICBJdCBkb2VzIGhhbmRsZSB3cml0ZXMg ZnJvbSB0aGUgRE1BIGVuZ2luZSwKKwkgKiBzbyBzZXQgdXAgYSBjaGFubmVsIGZvciB0YWxraW5n IHRvIGl0LgorCSAqLworCWlmIChkc2ktPnBvcnQgPT0gMSkgeworCQlkc2ktPnJlZ19kbWFfbWVt ID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgNCwKKwkJCQkJCSAgICAgICZkc2ktPnJlZ19kbWFf cGFkZHIsCisJCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFkc2ktPnJlZ19kbWFfbWVt KSB7CisJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBnZXQgRE1BIG1lbW9yeVxuIik7CisJCQlyZXR1 cm4gLUVOT01FTTsKKwkJfQorCisJCWRtYV9jYXBfemVybyhkbWFfbWFzayk7CisJCWRtYV9jYXBf c2V0KERNQV9NRU1DUFksIGRtYV9tYXNrKTsKKwkJZHNpLT5yZWdfZG1hX2NoYW4gPSBkbWFfcmVx dWVzdF9jaGFuX2J5X21hc2soJmRtYV9tYXNrKTsKKwkJaWYgKElTX0VSUihkc2ktPnJlZ19kbWFf Y2hhbikpIHsKKwkJCXJldCA9IFBUUl9FUlIoZHNpLT5yZWdfZG1hX2NoYW4pOworCQkJaWYgKHJl dCAhPSAtRVBST0JFX0RFRkVSKQorCQkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGdldCBETUEgY2hh bm5lbDogJWRcbiIsCisJCQkJCSAgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQkvKiBH ZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGRldmljZSdzIHJlZ2lzdGVycy4gIFRoZQor CQkgKiBzdHJ1Y3QgcmVzb3VyY2UgZm9yIHRoZSByZWdzIGdpdmVzIHVzIHRoZSBidXMgYWRkcmVz cworCQkgKiBpbnN0ZWFkLgorCQkgKi8KKwkJZHNpLT5yZWdfcGFkZHIgPSBiZTMyX3RvX2NwdXAo b2ZfZ2V0X2FkZHJlc3MoZGV2LT5vZl9ub2RlLAorCQkJCQkJCSAgICAgMCwgTlVMTCwgTlVMTCkp OworCX0KKworCWluaXRfY29tcGxldGlvbigmZHNpLT54ZmVyX2NvbXBsZXRpb24pOworCS8qIEF0 IHN0YXJ0dXAgZW5hYmxlIGVycm9yLXJlcG9ydGluZyBpbnRlcnJ1cHRzIGFuZCBub3RoaW5nIGVs c2UuICovCisJRFNJX1BPUlRfV1JJVEUoSU5UX0VOLCBEU0kxX0lOVEVSUlVQVFNfQUxXQVlTX0VO QUJMRUQpOworCS8qIENsZWFyIGFueSBleGlzdGluZyBpbnRlcnJ1cHQgc3RhdGUuICovCisJRFNJ X1BPUlRfV1JJVEUoSU5UX1NUQVQsIERTSV9QT1JUX1JFQUQoSU5UX1NUQVQpKTsKKworCXJldCA9 IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApLAorCQkJICAg ICAgIHZjNF9kc2lfaXJxX2hhbmRsZXIsIDAsICJ2YzQgZHNpIiwgZHNpKTsKKwlpZiAocmV0KSB7 CisJCWlmIChyZXQgIT0gLUVQUk9CRV9ERUZFUikKKwkJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRv IGdldCBpbnRlcnJ1cHQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRzaS0+ ZXNjYXBlX2Nsb2NrID0gZGV2bV9jbGtfZ2V0KGRldiwgImVzY2FwZSIpOworCWlmIChJU19FUlIo ZHNpLT5lc2NhcGVfY2xvY2spKSB7CisJCXJldCA9IFBUUl9FUlIoZHNpLT5lc2NhcGVfY2xvY2sp OworCQlpZiAocmV0ICE9IC1FUFJPQkVfREVGRVIpCisJCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0 byBnZXQgZXNjYXBlIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlk c2ktPnBsbF9waHlfY2xvY2sgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGh5Iik7CisJaWYgKElTX0VS Uihkc2ktPnBsbF9waHlfY2xvY2spKSB7CisJCXJldCA9IFBUUl9FUlIoZHNpLT5wbGxfcGh5X2Ns b2NrKTsKKwkJaWYgKHJldCAhPSAtRVBST0JFX0RFRkVSKQorCQkJZGV2X2VycihkZXYsICJGYWls ZWQgdG8gZ2V0IHBoeSBjbG9jazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJ ZHNpLT5waXhlbF9jbG9jayA9IGRldm1fY2xrX2dldChkZXYsICJwaXhlbCIpOworCWlmIChJU19F UlIoZHNpLT5waXhlbF9jbG9jaykpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2ktPnBpeGVsX2Nsb2Nr KTsKKwkJaWYgKHJldCAhPSAtRVBST0JFX0RFRkVSKQorCQkJZGV2X2VycihkZXYsICJGYWlsZWQg dG8gZ2V0IHBpeGVsIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkv KiBUaGUgZXNjIGNsb2NrIHJhdGUgaXMgc3VwcG9zZWQgdG8gYWx3YXlzIGJlIDEwME1oei4gKi8K KwlyZXQgPSBjbGtfc2V0X3JhdGUoZHNpLT5lc2NhcGVfY2xvY2ssIDEwMCAqIDEwMDAwMDApOwor CWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gc2V0IGVzYyBjbG9jazogJWRc biIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gdmM0X2RzaV9pbml0X3BoeV9j bG9ja3MoZHNpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGRzaS0+cG9ydCA9 PSAxKQorCQl2YzQtPmRzaTEgPSBkc2k7CisKKwlkcm1fZW5jb2Rlcl9pbml0KGRybSwgZHNpLT5l bmNvZGVyLCAmdmM0X2RzaV9lbmNvZGVyX2Z1bmNzLAorCQkJIERSTV9NT0RFX0VOQ09ERVJfRFNJ LCBOVUxMKTsKKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKGRzaS0+ZW5jb2RlciwgJnZjNF9kc2lf ZW5jb2Rlcl9oZWxwZXJfZnVuY3MpOworCisJZHNpLT5jb25uZWN0b3IgPSB2YzRfZHNpX2Nvbm5l Y3Rvcl9pbml0KGRybSwgZHNpKTsKKwlpZiAoSVNfRVJSKGRzaS0+Y29ubmVjdG9yKSkgeworCQly ZXQgPSBQVFJfRVJSKGRzaS0+Y29ubmVjdG9yKTsKKwkJZ290byBlcnJfZGVzdHJveV9lbmNvZGVy OworCX0KKworCWRzaS0+ZHNpX2hvc3Qub3BzID0gJnZjNF9kc2lfaG9zdF9vcHM7CisJZHNpLT5k c2lfaG9zdC5kZXYgPSBkZXY7CisKKwltaXBpX2RzaV9ob3N0X3JlZ2lzdGVyKCZkc2ktPmRzaV9o b3N0KTsKKworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRzaSk7CisKKwlwbV9ydW50aW1lX2VuYWJs ZShkZXYpOworCisJcmV0dXJuIDA7CisKK2Vycl9kZXN0cm95X2VuY29kZXI6CisJdmM0X2RzaV9l bmNvZGVyX2Rlc3Ryb3koZHNpLT5lbmNvZGVyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRp YyB2b2lkIHZjNF9kc2lfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAq bWFzdGVyLAorCQkJICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0g ZGV2X2dldF9kcnZkYXRhKG1hc3Rlcik7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9k ZXYoZHJtKTsKKwlzdHJ1Y3QgdmM0X2RzaSAqZHNpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisK KwlwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsKKworCXZjNF9kc2lfY29ubmVjdG9yX2Rlc3Ryb3ko ZHNpLT5jb25uZWN0b3IpOworCXZjNF9kc2lfZW5jb2Rlcl9kZXN0cm95KGRzaS0+ZW5jb2Rlcik7 CisKKwltaXBpX2RzaV9ob3N0X3VucmVnaXN0ZXIoJmRzaS0+ZHNpX2hvc3QpOworCisJY2xrX2Rp c2FibGVfdW5wcmVwYXJlKGRzaS0+cGxsX3BoeV9jbG9jayk7CisJY2xrX2Rpc2FibGVfdW5wcmVw YXJlKGRzaS0+ZXNjYXBlX2Nsb2NrKTsKKworCWlmIChkc2ktPnBvcnQgPT0gMSkKKwkJdmM0LT5k c2kxID0gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfb3BzIHZjNF9k c2lfb3BzID0geworCS5iaW5kICAgPSB2YzRfZHNpX2JpbmQsCisJLnVuYmluZCA9IHZjNF9kc2lf dW5iaW5kLAorfTsKKworc3RhdGljIGludCB2YzRfZHNpX2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZ2 YzRfZHNpX29wcyk7Cit9CisKK3N0YXRpYyBpbnQgdmM0X2RzaV9kZXZfcmVtb3ZlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29tcG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmdmM0 X2RzaV9vcHMpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZjNF9k c2lfZHJpdmVyID0geworCS5wcm9iZSA9IHZjNF9kc2lfZGV2X3Byb2JlLAorCS5yZW1vdmUgPSB2 YzRfZHNpX2Rldl9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidmM0X2RzaSIsCisJ CS5vZl9tYXRjaF90YWJsZSA9IHZjNF9kc2lfZHRfbWF0Y2gsCisJfSwKK307Ci0tIAoyLjExLjAK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=