From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Gordon Subject: [PATCH 01/10 v5] drm/i915: GuC-specific firmware loader Date: Wed, 29 Jul 2015 18:48:29 +0100 Message-ID: <1438192118-5807-2-git-send-email-david.s.gordon@intel.com> References: <1438192118-5807-1-git-send-email-david.s.gordon@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 5B48D6E4E4 for ; Wed, 29 Jul 2015 10:48:49 -0700 (PDT) In-Reply-To: <1438192118-5807-1-git-send-email-david.s.gordon@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogQWxleCBEYWkgPHl1LmRhaUBpbnRlbC5jb20+CgpUaGlzIGZldGNoZXMgdGhlIHJlcXVp cmVkIGZpcm13YXJlIGltYWdlIGZyb20gdGhlIGZpbGVzeXN0ZW0sCnRoZW4gbG9hZHMgaXQgaW50 byB0aGUgR3VDJ3MgbWVtb3J5IHZpYSBhIGRlZGljYXRlZCBETUEgZW5naW5lLgoKVGhpcyBwYXRj aCBpcyBkZXJpdmVkIGZyb20gR3VDIGxvYWRpbmcgd29yayBvcmlnaW5hbGx5IGRvbmUgYnkKVmlu aXQgQXphZCBhbmQgQmVuIFdpZGF3c2t5LgoKdjI6CiAgICBWYXJpb3VzIGltcHJvdmVtZW50cyBw ZXIgcmV2aWV3IGNvbW1lbnRzIGJ5IENocmlzIFdpbHNvbgoKdjM6CiAgICBSZW1vdmVkICd3YWl0 JyBwYXJhbWV0ZXIgdG8gaW50ZWxfZ3VjX3Vjb2RlX2xvYWQoKSBhcyBmaXJtd2FyZQogICAgICAg IHByZWZldGNoIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgaW4gdGhlIGNvbW1vbiBmaXJtd2FyZSBs b2FkZXIsCglwZXIgRGFuaWVsIFZldHRlcidzIHJlcXVlc3QuCiAgICBGaXJtd2FyZSBjaGVja2Vy IGNhbGxiYWNrIGZuIG5vdyByZXR1cm5zIGVycm5vIHJhdGhlciB0aGFuIGJvb2wuCgp2NDoKICAg IFNxdWFzaCB1Qy1pbmRlcGVuZGVudCBjb2RlIGludG8gR3VDLXNwZWNpZmMgbG9hZGVyIFtEYW5p ZWwgVmV0dGVyXQogICAgRG9uJ3Qga2VlcCB0aGUgZHJpdmVyIHdvcmtpbmcgKGJ5IGZhbGxpbmcg YmFjayB0byBleGVjbGlzdCBtb2RlKQogICAgICAgIGlmIEd1QyBmaXJtd2FyZSBsb2FkaW5nIGZh aWxzIFtEYW5pZWwgVmV0dGVyXQoKdjU6CiAgICBDbGFyaWZ5IFdPUENNLXJlbGF0ZWQgI2RlZmlu ZXMgW1RvbSBPJ1JvdXJrZV0KICAgIERlbGV0ZSBvYnNvbGV0ZSBjb2RlIG5vIGxvbmdlciByZXF1 aXJlZCB3aXRoIGN1cnJlbnQgaC93ICYgZi93CiAgICAgICAgW1RvbSBPJ1JvdXJrZV0KICAgIE1v dmUgdGhlIGNhbGwgdG8gaW50ZWxfZ3VjX3Vjb2RlX2luaXQoKSBsYXRlciwgc28gdGhhdCBpdCBj YW4KICAgICAgICBhbGxvY2F0ZSBHRU0gb2JqZWN0cywgYW5kIGhhdmUgaXQgZmV0Y2ggdGhlIGZp cm13YXJlOyB0aGVuCglpbnRlbF9ndWNfdWNvZGVfbG9hZCgpIGRvZXNuJ3QgbmVlZCB0byBmZXRj aCBpdCBsYXRlci4KICAgICAgICBbRGFuaWVsIFZldHRlcl0uCgpJc3N1ZTogVklaLTQ4ODQKU2ln bmVkLW9mZi1ieTogQWxleCBEYWkgPHl1LmRhaUBpbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IERh dmUgR29yZG9uIDxkYXZpZC5zLmdvcmRvbkBpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvTWFrZWZpbGUgICAgICAgICAgIHwgICAzICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZG1hLmMgICAgICAgICB8ICAgOSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5o ICAgICAgICAgfCAgMTEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyAgICAgICAg IHwgIDE2ICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3JlZy5oICAgICB8ICAxNyAr LQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCAgICAgICAgIHwgICA0ICstCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaCAgICAgICAgfCAgNjcgKysrKwogZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2Z3aWYuaCAgIHwgICAzICstCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9ndWNfbG9hZGVyLmMgfCA1MzEgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKIDkgZmlsZXMgY2hhbmdlZCwgNjUyIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0p CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjLmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfbG9hZGVyLmMK CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IDQxZmI4YTkuLmNjMzU5ZTAgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01h a2VmaWxlCkBAIC00MCw2ICs0MCw5IEBAIGk5MTUteSArPSBpOTE1X2NtZF9wYXJzZXIubyBcCiAJ ICBpbnRlbF9yaW5nYnVmZmVyLm8gXAogCSAgaW50ZWxfdW5jb3JlLm8KIAorIyBnZW5lcmFsLXB1 cnBvc2UgbWljcm9jb250cm9sbGVyIChHdUMpIHN1cHBvcnQKK2k5MTUteSArPSBpbnRlbF9ndWNf bG9hZGVyLm8KKwogIyBhdXRvZ2VuZXJhdGVkIG51bGwgcmVuZGVyIHN0YXRlCiBpOTE1LXkgKz0g aW50ZWxfcmVuZGVyc3RhdGVfZ2VuNi5vIFwKIAkgIGludGVsX3JlbmRlcnN0YXRlX2dlbjcubyBc CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kbWEuYwppbmRleCBhYjM3ZDExLi4yMTkzY2MyIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZG1hLmMKQEAgLTQzNSw2ICs0MzUsMTEgQEAgc3RhdGljIGludCBpOTE1X2xvYWRf bW9kZXNldF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJICogd29ya2luZyBpcnFzIGZv ciBlLmcuIGdtYnVzIGFuZCBkcCBhdXggdHJhbnNmZXJzLiAqLwogCWludGVsX21vZGVzZXRfaW5p dChkZXYpOwogCisJLyogaW50ZWxfZ3VjX3Vjb2RlX2luaXQoKSBuZWVkcyB0aGUgbXV0ZXggdG8g YWxsb2NhdGUgR0VNIG9iamVjdHMgKi8KKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7 CisJaW50ZWxfZ3VjX3Vjb2RlX2luaXQoZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0 X211dGV4KTsKKwogCXJldCA9IGk5MTVfZ2VtX2luaXQoZGV2KTsKIAlpZiAocmV0KQogCQlnb3Rv IGNsZWFudXBfaXJxOwpAQCAtNDc2LDYgKzQ4MSw5IEBAIGNsZWFudXBfZ2VtOgogCWk5MTVfZ2Vt X2NvbnRleHRfZmluaShkZXYpOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwog Y2xlYW51cF9pcnE6CisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWludGVsX2d1 Y191Y29kZV9maW5pKGRldik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJ ZHJtX2lycV91bmluc3RhbGwoZGV2KTsKIGNsZWFudXBfZ2VtX3N0b2xlbjoKIAlpOTE1X2dlbV9j bGVhbnVwX3N0b2xlbihkZXYpOwpAQCAtMTEyOCw2ICsxMTM2LDcgQEAgaW50IGk5MTVfZHJpdmVy X3VubG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCWZsdXNoX3dvcmtxdWV1ZShkZXZfcHJp di0+d3EpOwogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWludGVsX2d1Y191 Y29kZV9maW5pKGRldik7CiAJaTkxNV9nZW1fY2xlYW51cF9yaW5nYnVmZmVyKGRldik7CiAJaTkx NV9nZW1fY29udGV4dF9maW5pKGRldik7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRl eCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCAwNGFhMzRhLi4yYzUzOWRmIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRl bC1pb21tdS5oPgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC9wbV9x b3MuaD4KKyNpbmNsdWRlICJpbnRlbF9ndWMuaCIKIAogLyogR2VuZXJhbCBjdXN0b21pemF0aW9u OgogICovCkBAIC0xNjk3LDYgKzE2OTgsOCBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CiAK IAlzdHJ1Y3QgaTkxNV92aXJ0dWFsX2dwdSB2Z3B1OwogCisJc3RydWN0IGludGVsX2d1YyBndWM7 CisKIAlzdHJ1Y3QgaW50ZWxfY3NyIGNzcjsKIAogCS8qIERpc3BsYXkgQ1NSLXJlbGF0ZWQgcHJv dGVjdGlvbiAqLwpAQCAtMTk0MSw2ICsxOTQ0LDExIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl90b19pOTE1KHN0cnVjdCBkZXZpY2UgKmRldikKIAlyZXR1cm4g dG9faTkxNShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmd1Y190b19pOTE1KHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKK3sK KwlyZXR1cm4gY29udGFpbmVyX29mKGd1Yywgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUsIGd1Yyk7 Cit9CisKIC8qIEl0ZXJhdGUgb3ZlciBpbml0aWFsaXNlZCByaW5ncyAqLwogI2RlZmluZSBmb3Jf ZWFjaF9yaW5nKHJpbmdfXywgZGV2X3ByaXZfXywgaV9fKSBcCiAJZm9yICgoaV9fKSA9IDA7IChp X18pIDwgSTkxNV9OVU1fUklOR1M7IChpX18pKyspIFwKQEAgLTI1NDQsNiArMjU1Miw5IEBAIHN0 cnVjdCBkcm1faTkxNV9jbWRfdGFibGUgewogCiAjZGVmaW5lIEhBU19DU1IoZGV2KQkoSVNfU0tZ TEFLRShkZXYpKQogCisjZGVmaW5lIEhBU19HVUNfVUNPREUoZGV2KQkoSVNfR0VOOShkZXYpKQor I2RlZmluZSBIQVNfR1VDX1NDSEVEKGRldikJKElTX0dFTjkoZGV2KSkKKwogI2RlZmluZSBIQVNf UkVTT1VSQ0VfU1RSRUFNRVIoZGV2KSAoSVNfSEFTV0VMTChkZXYpIHx8IFwKIAkJCQkgICAgSU5U RUxfSU5GTyhkZXYpLT5nZW4gPj0gOCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggNzk1 ODU2ZC4uMmNmYjQyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0u YworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC00Njc5LDYgKzQ2Nzks MjIgQEAgaTkxNV9nZW1faW5pdF9odyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCQkJZ290byBv dXQ7CiAJfQogCisJLyogV2UgY2FuJ3QgZW5hYmxlIGNvbnRleHRzIHVudGlsIGFsbCBmaXJtd2Fy ZSBpcyBsb2FkZWQgKi8KKwlyZXQgPSBpbnRlbF9ndWNfdWNvZGVfbG9hZChkZXYpOworCWlmIChy ZXQpIHsKKwkJLyoKKwkJICogSWYgd2UgZ290IGFuIGVycm9yIGFuZCBHdUMgc3VibWlzc2lvbiBp cyBlbmFibGVkLCBtYXAKKwkJICogdGhlIGVycm9yIHRvIC1FSU8gc28gdGhlIEdQVSB3aWxsIGJl IGRlY2xhcmVkIHdlZGdlZC4KKwkJICogT1RPSCwgaWYgd2UgZGlkbid0IGludGVuZCB0byB1c2Ug dGhlIEd1QyBhbnl3YXksIGp1c3QKKwkJICogZGlzY2FyZCB0aGUgZXJyb3IgYW5kIGNhcnJ5IG9u LgorCQkgKi8KKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBHdUMsIGVycm9yICVk JXNcbiIsIHJldCwKKwkJCWk5MTUuZW5hYmxlX2d1Y19zdWJtaXNzaW9uID8gIiIgOiAiIChpZ25v cmVkKSIpOworCQlyZXQgPSBpOTE1LmVuYWJsZV9ndWNfc3VibWlzc2lvbiA/IC1FSU8gOiAwOwor CQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisJfQorCiAJLyogTm93IGl0IGlzIHNhZmUgdG8gZ28g YmFjayByb3VuZCBhbmQgZG8gZXZlcnl0aGluZyBlbHNlOiAqLwogCWZvcl9lYWNoX3Jpbmcocmlu ZywgZGV2X3ByaXYsIGkpIHsKIAkJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXE7CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19yZWcuaCBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ3VjX3JlZy5oCmluZGV4IGNjZGM2YzguLjhjOGU1NzQgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3JlZy5oCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ3VjX3JlZy5oCkBAIC0zOCwxMCArMzgsNiBAQAogI2RlZmluZSAg IEdTX01JQV9TSElGVAkJCTE2CiAjZGVmaW5lICAgR1NfTUlBX01BU0sJCQkgICgweDA3IDw8IEdT X01JQV9TSElGVCkKIAotI2RlZmluZSBHVUNfV09QQ01fU0laRQkJCTB4YzA1MAotI2RlZmluZSAg IEdVQ19XT1BDTV9TSVpFX1ZBTFVFICAJICAoMHg4MCA8PCAxMikJLyogNTEyS0IgKi8KLSNkZWZp bmUgR1VDX1dPUENNX09GRlNFVAkJMHg4MDAwMAkJLyogNTEyS0IgKi8KLQogI2RlZmluZSBTT0ZU X1NDUkFUQ0gobikJCQkoMHhjMTgwICsgKChuKSAqIDQpKQogCiAjZGVmaW5lIFVPU19SU0FfU0NS QVRDSF8wCQkweGMyMDAKQEAgLTU2LDEwICs1MiwxOCBAQAogI2RlZmluZSAgIFVPU19NT1ZFCQkJ ICAoMTw8NCkKICNkZWZpbmUgICBTVEFSVF9ETUEJCQkgICgxPDwwKQogI2RlZmluZSBETUFfR1VD X1dPUENNX09GRlNFVAkJMHhjMzQwCisjZGVmaW5lICAgR1VDX1dPUENNX09GRlNFVF9WQUxVRQkg IDB4ODAwMDAJLyogNTEyS0IgKi8KKworI2RlZmluZSBHVUNfV09QQ01fU0laRQkJCTB4YzA1MAor I2RlZmluZSAgIEdVQ19XT1BDTV9TSVpFX1ZBTFVFICAJICAoMHg4MCA8PCAxMikJLyogNTEyS0Ig Ki8KKworLyogR3VDIGFkZHJlc3NlcyBiZWxvdyBHVUNfV09QQ01fVE9QIGRvbid0IG1hcCB0aHJv dWdoIHRoZSBHVFQgKi8KKyNkZWZpbmUJR1VDX1dPUENNX1RPUAkJCShHVUNfV09QQ01fU0laRV9W QUxVRSkKIAogI2RlZmluZSBHRU44X0dUX1BNX0NPTkZJRwkJMHgxMzgxNDAKKyNkZWZpbmUgR0VO OUxQX0dUX1BNX0NPTkZJRwkJMHgxMzgxNDAKICNkZWZpbmUgR0VOOV9HVF9QTV9DT05GSUcJCTB4 MTM4MTZjCi0jZGVmaW5lICAgR0VOOF9HVF9ET09SQkVMTF9FTkFCTEUJICAoMTw8MCkKKyNkZWZp bmUgICBHVF9ET09SQkVMTF9FTkFCTEUJCSAgKDE8PDApCiAKICNkZWZpbmUgR0VOOF9HVENSCQkJ MHg0Mjc0CiAjZGVmaW5lICAgR0VOOF9HVENSX0lOVkFMSURBVEUJCSAgKDE8PDApCkBAIC04MCw3 ICs4NCw4IEBACiAJCQkJIEdVQ19FTkFCTEVfUkVBRF9DQUNIRV9MT0dJQwkJfCBcCiAJCQkJIEdV Q19FTkFCTEVfTUlBX0NBQ0hJTkcJCQl8IFwKIAkJCQkgR1VDX0VOQUJMRV9SRUFEX0NBQ0hFX0ZP Ul9TUkFNX0RBVEEJfCBcCi0JCQkJIEdVQ19FTkFCTEVfUkVBRF9DQUNIRV9GT1JfV09QQ01fREFU QSkKKwkJCQkgR1VDX0VOQUJMRV9SRUFEX0NBQ0hFX0ZPUl9XT1BDTV9EQVRBCXwgXAorCQkJCSBH VUNfRU5BQkxFX01JQV9DTE9DS19HQVRJTkcpCiAKICNkZWZpbmUgSE9TVDJHVUNfSU5URVJSVVBU CQkweGM0YzgKICNkZWZpbmUgICBIT1NUMkdVQ19UUklHR0VSCQkgICgxPDwwKQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfcmVnLmgKaW5kZXggM2E3NzY3OC4uZmY1ODI0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Jl Zy5oCkBAIC02ODQ5LDcgKzY4NDksOSBAQCBlbnVtIHNrbF9kaXNwX3Bvd2VyX3dlbGxzIHsKICNk ZWZpbmUgICBHRU45X1BHQ1RMX1NTQl9FVTMxMV9BQ0sJKDEgPDwgMTQpCiAKICNkZWZpbmUgR0VO N19NSVNDQ1BDVEwJCQkoMHg5NDI0KQotI2RlZmluZSAgIEdFTjdfRE9QX0NMT0NLX0dBVEVfRU5B QkxFCSgxPDwwKQorI2RlZmluZSAgIEdFTjdfRE9QX0NMT0NLX0dBVEVfRU5BQkxFCQkoMTw8MCkK KyNkZWZpbmUgICBHRU44X0RPUF9DTE9DS19HQVRFX0NGQ0xLX0VOQUJMRQkoMTw8MikKKyNkZWZp bmUgICBHRU44X0RPUF9DTE9DS19HQVRFX0dVQ19FTkFCTEUJKDE8PDQpCiAKIC8qIElWWUJSSURH RSBEUEYgKi8KICNkZWZpbmUgR0VON19MM0NERVJSU1QxCQkJMHhCMDA4IC8qIEwzQ0QgRXJyb3Ig U3RhdHVzIDEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uMjg0NmI2ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2d1Yy5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkg MjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNv cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICog cGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IK KyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBP UiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBP VEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S VCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRI RSBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpZm5kZWYgX0lOVEVMX0dVQ19IXworI2RlZmluZSBfSU5U RUxfR1VDX0hfCisKKyNpbmNsdWRlICJpbnRlbF9ndWNfZndpZi5oIgorI2luY2x1ZGUgImk5MTVf Z3VjX3JlZy5oIgorCitlbnVtIGludGVsX2d1Y19md19zdGF0dXMgeworCUdVQ19GSVJNV0FSRV9G QUlMID0gLTEsCisJR1VDX0ZJUk1XQVJFX05PTkUgPSAwLAorCUdVQ19GSVJNV0FSRV9QRU5ESU5H LAorCUdVQ19GSVJNV0FSRV9TVUNDRVNTCit9OworCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgZW5j YXBzdWxhdGVzIGFsbCB0aGUgZGF0YSBuZWVkZWQgZHVyaW5nIHRoZSBwcm9jZXNzCisgKiBvZiBm ZXRjaGluZywgY2FjaGluZywgYW5kIGxvYWRpbmcgdGhlIGZpcm13YXJlIGltYWdlIGludG8gdGhl IEd1Qy4KKyAqLworc3RydWN0IGludGVsX2d1Y19mdyB7CisJc3RydWN0IGRybV9kZXZpY2UgKgkJ Z3VjX2RldjsKKwljb25zdCBjaGFyICoJCQlndWNfZndfcGF0aDsKKwlzaXplX3QJCQkJZ3VjX2Z3 X3NpemU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKglndWNfZndfb2JqOworCWVudW0g aW50ZWxfZ3VjX2Z3X3N0YXR1cwlndWNfZndfZmV0Y2hfc3RhdHVzOworCWVudW0gaW50ZWxfZ3Vj X2Z3X3N0YXR1cwlndWNfZndfbG9hZF9zdGF0dXM7CisKKwl1aW50MTZfdAkJCWd1Y19md19tYWpv cl93YW50ZWQ7CisJdWludDE2X3QJCQlndWNfZndfbWlub3Jfd2FudGVkOworCXVpbnQxNl90CQkJ Z3VjX2Z3X21ham9yX2ZvdW5kOworCXVpbnQxNl90CQkJZ3VjX2Z3X21pbm9yX2ZvdW5kOworfTsK Kworc3RydWN0IGludGVsX2d1YyB7CisJc3RydWN0IGludGVsX2d1Y19mdyBndWNfZnc7CisKKwl1 aW50MzJfdCBsb2dfZmxhZ3M7Cit9OworCisvKiBpbnRlbF9ndWNfbG9hZGVyLmMgKi8KK2V4dGVy biB2b2lkIGludGVsX2d1Y191Y29kZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0 ZXJuIGludCBpbnRlbF9ndWNfdWNvZGVfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4 dGVybiB2b2lkIGludGVsX2d1Y191Y29kZV9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwor ZXh0ZXJuIGNvbnN0IGNoYXIgKmludGVsX2d1Y19md19zdGF0dXNfcmVwcihlbnVtIGludGVsX2d1 Y19md19zdGF0dXMgc3RhdHVzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9ndWNfZndpZi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3Vj X2Z3aWYuaAppbmRleCAxOGQ3ZjIwLi4wNmFhZDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9ndWNfZndpZi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2d1Y19md2lmLmgKQEAgLTMyLDkgKzMyLDggQEAKICAqIEVESVRJTkcgVEhJUyBGSUxFIElTIFRI RVJFRk9SRSBOT1QgUkVDT01NRU5ERUQgLSBZT1VSIENIQU5HRVMgTUFZIEJFIExPU1QuCiAgKi8K IAotI2RlZmluZSBHRlhDT1JFX0ZBTUlMWV9HRU44CQkxMQogI2RlZmluZSBHRlhDT1JFX0ZBTUlM WV9HRU45CQkxMgotI2RlZmluZSBHRlhDT1JFX0ZBTUlMWV9GT1JDRV9VTE9ORwkweDdmZmZmZmZm CisjZGVmaW5lIEdGWENPUkVfRkFNSUxZX1VOS05PV04JCTB4N2ZmZmZmZmYKIAogI2RlZmluZSBH VUNfQ1RYX1BSSU9SSVRZX0NSSVRJQ0FMCTAKICNkZWZpbmUgR1VDX0NUWF9QUklPUklUWV9ISUdI CQkxCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfbG9hZGVyLmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfbG9hZGVyLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uN2QwYWQzZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2d1Y19sb2FkZXIuYwpAQCAtMCwwICsxLDUzMSBAQAorLyoKKyAq IENvcHlyaWdodCDCqSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5n IHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMg b3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAq IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFM SU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBWaW5pdCBB emFkIDx2aW5pdC5hemFkQGludGVsLmNvbT4KKyAqICAgIEJlbiBXaWRhd3NreSA8YmVuQGJ3aWRh d3NrLm5ldD4KKyAqICAgIERhdmUgR29yZG9uIDxkYXZpZC5zLmdvcmRvbkBpbnRlbC5jb20+Cisg KiAgICBBbGV4IERhaSA8eXUuZGFpQGludGVsLmNvbT4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2Zp cm13YXJlLmg+CisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKyNpbmNsdWRlICJpbnRlbF9ndWMuaCIK KworLyoqCisgKiBET0M6IEd1QworICoKKyAqIGludGVsX2d1YzoKKyAqIFRvcCBsZXZlbCBzdHJ1 Y3R1cmUgb2YgZ3VjLiBJdCBoYW5kbGVzIGZpcm13YXJlIGxvYWRpbmcgYW5kIG1hbmFnZXMgY2xp ZW50CisgKiBwb29sIGFuZCBkb29yYmVsbHMuIGludGVsX2d1YyBvd25zIGEgaTkxNV9ndWNfY2xp ZW50IHRvIHJlcGxhY2UgdGhlIGxlZ2FjeQorICogRXhlY0xpc3Qgc3VibWlzc2lvbi4KKyAqCisg KiBGaXJtd2FyZSB2ZXJzaW9uaW5nOgorICogVGhlIGZpcm13YXJlIGJ1aWxkIHByb2Nlc3Mgd2ls bCBnZW5lcmF0ZSBhIHZlcnNpb24gaGVhZGVyIGZpbGUgd2l0aCBtYWpvciBhbmQKKyAqIG1pbm9y IHZlcnNpb24gZGVmaW5lZC4gVGhlIHZlcnNpb25zIGFyZSBidWlsdCBpbnRvIENTUyBoZWFkZXIg b2YgZmlybXdhcmUuCisgKiBpOTE1IGtlcm5lbCBkcml2ZXIgc2V0IHRoZSBtaW5pbWFsIGZpcm13 YXJlIHZlcnNpb24gcmVxdWlyZWQgcGVyIHBsYXRmb3JtLgorICogVGhlIGZpcm13YXJlIGluc3Rh bGxhdGlvbiBwYWNrYWdlIHdpbGwgaW5zdGFsbCAoc3ltYm9saWMgbGluaykgcHJvcGVyIHZlcnNp b24KKyAqIG9mIGZpcm13YXJlLgorICoKKyAqIEd1QyBhZGRyZXNzIHNwYWNlOgorICogR3VDIGRv ZXMgbm90IGFsbG93IGFueSBnZnggR0dUVCBhZGRyZXNzIHRoYXQgZmFsbHMgaW50byByYW5nZSBb MCwgV09QQ01fVE9QKSwKKyAqIHdoaWNoIGlzIHJlc2VydmVkIGZvciBCb290IFJPTSwgU1JBTSBh bmQgV09QQ00uIEN1cnJlbnRseSB0aGlzIHRvcCBhZGRyZXNzIGlzCisgKiA1MTJLLiBJbiBvcmRl ciB0byBleGNsdWRlIDAtNTEySyBhZGRyZXNzIHNwYWNlIGZyb20gR0dUVCwgYWxsIGdmeCBvYmpl Y3RzCisgKiB1c2VkIGJ5IEd1QyBpcyBwaW5uZWQgd2l0aCBQSU5fT0ZGU0VUX0JJQVMgYWxvbmcg d2l0aCBzaXplIG9mIFdPUENNLgorICoKKyAqIEZpcm13YXJlIGxvZzoKKyAqIEZpcm13YXJlIGxv ZyBpcyBlbmFibGVkIGJ5IHNldHRpbmcgaTkxNS5ndWNfbG9nX2xldmVsIHRvIG5vbi1uZWdhdGl2 ZSBsZXZlbC4KKyAqIExvZyBkYXRhIGlzIHByaW50ZWQgb3V0IHZpYSByZWFkaW5nIGRlYnVnZnMg aTkxNV9ndWNfbG9nX2R1bXAuIFJlYWRpbmcgZnJvbQorICogaTkxNV9ndWNfbG9hZF9zdGF0dXMg d2lsbCBwcmludCBvdXQgZmlybXdhcmUgbG9hZGluZyBzdGF0dXMgYW5kIHNjcmF0Y2gKKyAqIHJl Z2lzdGVycyB2YWx1ZS4KKyAqCisgKi8KKworI2RlZmluZSBJOTE1X1NLTF9HVUNfVUNPREUgImk5 MTUvc2tsX2d1Y192ZXIzLmJpbiIKK01PRFVMRV9GSVJNV0FSRShJOTE1X1NLTF9HVUNfVUNPREUp OworCisvKiBVc2VyLWZyaWVuZGx5IHJlcHJlc2VudGF0aW9uIG9mIGFuIGVudW0gKi8KK2NvbnN0 IGNoYXIgKmludGVsX2d1Y19md19zdGF0dXNfcmVwcihlbnVtIGludGVsX2d1Y19md19zdGF0dXMg c3RhdHVzKQoreworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSBHVUNfRklSTVdBUkVfRkFJTDoK KwkJcmV0dXJuICJGQUlMIjsKKwljYXNlIEdVQ19GSVJNV0FSRV9OT05FOgorCQlyZXR1cm4gIk5P TkUiOworCWNhc2UgR1VDX0ZJUk1XQVJFX1BFTkRJTkc6CisJCXJldHVybiAiUEVORElORyI7CisJ Y2FzZSBHVUNfRklSTVdBUkVfU1VDQ0VTUzoKKwkJcmV0dXJuICJTVUNDRVNTIjsKKwlkZWZhdWx0 OgorCQlyZXR1cm4gIlVOS05PV04hIjsKKwl9Cit9OworCitzdGF0aWMgdTMyIGdldF9ndHR5cGUo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCS8qIFhYWDogR1QgdHlwZSBi YXNlZCBvbiBQQ0kgZGV2aWNlIElEPyBmaWVsZCBzZWVtcyB1bnVzZWQgYnkgZncgKi8KKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIHUzMiBnZXRfY29yZV9mYW1pbHkoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQoreworCXN3aXRjaCAoSU5URUxfSU5GTyhkZXZfcHJpdiktPmdlbikg eworCWNhc2UgOToKKwkJcmV0dXJuIEdGWENPUkVfRkFNSUxZX0dFTjk7CisKKwlkZWZhdWx0Ogor CQlEUk1fRVJST1IoIkdVQzogdW5zdXBwb3J0ZWQgY29yZSBmYW1pbHlcbiIpOworCQlyZXR1cm4g R0ZYQ09SRV9GQU1JTFlfVU5LTk9XTjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNldF9ndWNfaW5p dF9wYXJhbXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCXN0cnVjdCBp bnRlbF9ndWMgKmd1YyA9ICZkZXZfcHJpdi0+Z3VjOworCXUzMiBwYXJhbXNbR1VDX0NUTF9NQVhf RFdPUkRTXTsKKwlpbnQgaTsKKworCW1lbXNldCgmcGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7 CisKKwlwYXJhbXNbR1VDX0NUTF9ERVZJQ0VfSU5GT10gfD0KKwkJKGdldF9ndHR5cGUoZGV2X3By aXYpIDw8IEdVQ19DVExfR1RUWVBFX1NISUZUKSB8CisJCShnZXRfY29yZV9mYW1pbHkoZGV2X3By aXYpIDw8IEdVQ19DVExfQ09SRUZBTUlMWV9TSElGVCk7CisKKwkvKgorCSAqIEd1QyBBUkFUIGlu Y3JlbWVudCBpcyAxMCBucy4gR3VDIGRlZmF1bHQgc2NoZWR1bGVyIHF1YW50dW0gaXMgb25lCisJ ICogc2Vjb25kLiBUaGlzIEFSQVIgaXMgY2FsY3VsYXRlZCBieToKKwkgKiBTY2hlZHVsZXItUXVh bnR1bS1pbi1ucyAvIEFSQVQtaW5jcmVtZW50LWluLW5zID0gMTAwMDAwMDAwMCAvIDEwCisJICov CisJcGFyYW1zW0dVQ19DVExfQVJBVF9ISUdIXSA9IDA7CisJcGFyYW1zW0dVQ19DVExfQVJBVF9M T1ddID0gMTAwMDAwMDAwOworCisJcGFyYW1zW0dVQ19DVExfV0FdIHw9IEdVQ19DVExfV0FfVUtf QllfRFJJVkVSOworCisJcGFyYW1zW0dVQ19DVExfRkVBVFVSRV0gfD0gR1VDX0NUTF9ESVNBQkxF X1NDSEVEVUxFUiB8CisJCQlHVUNfQ1RMX1ZDUzJfRU5BQkxFRDsKKworCWlmIChpOTE1Lmd1Y19s b2dfbGV2ZWwgPj0gMCkgeworCQlwYXJhbXNbR1VDX0NUTF9MT0dfUEFSQU1TXSA9IGd1Yy0+bG9n X2ZsYWdzOworCQlwYXJhbXNbR1VDX0NUTF9ERUJVR10gPQorCQkJaTkxNS5ndWNfbG9nX2xldmVs IDw8IEdVQ19MT0dfVkVSQk9TSVRZX1NISUZUOworCX0KKworCUk5MTVfV1JJVEUoU09GVF9TQ1JB VENIKDApLCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBHVUNfQ1RMX01BWF9EV09SRFM7IGkrKykK KwkJSTkxNV9XUklURShTT0ZUX1NDUkFUQ0goMSArIGkpLCBwYXJhbXNbaV0pOworfQorCisvKgor ICogUmVhZCB0aGUgR3VDIHN0YXR1cyByZWdpc3RlciAoR1VDX1NUQVRVUykgYW5kIHN0b3JlIGl0 IGluIHRoZQorICogc3BlY2lmaWVkIGxvY2F0aW9uOyB0aGVuIHJldHVybiBhIGJvb2xlYW4gaW5k aWNhdGluZyB3aGV0aGVyCisgKiB0aGUgdmFsdWUgbWF0Y2hlcyBlaXRoZXIgb2YgdHdvIHZhbHVl cyByZXByZXNlbnRpbmcgY29tcGxldGlvbgorICogb2YgdGhlIEd1QyBib290IHByb2Nlc3MuCisg KgorICogVGhpcyBpcyB1c2VkIGZvciBwb2xsaW5nIHRoZSBHdUMgc3RhdHVzIGluIGEgd2FpdF9m b3JfYXRvbWljKCkKKyAqIGxvb3AgYmVsb3cuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBndWNf dWNvZGVfcmVzcG9uc2Uoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCSAg ICAgIHUzMiAqc3RhdHVzKQoreworCXUzMiB2YWwgPSBJOTE1X1JFQUQoR1VDX1NUQVRVUyk7CisJ KnN0YXR1cyA9IHZhbDsKKwlyZXR1cm4gKCh2YWwgJiBHU19VS0VSTkVMX01BU0spID09IEdTX1VL RVJORUxfUkVBRFkgfHwKKwkJKHZhbCAmIEdTX1VLRVJORUxfTUFTSykgPT0gR1NfVUtFUk5FTF9M QVBJQ19ET05FKTsKK30KKworLyoKKyAqIFRyYW5zZmVyIHRoZSBmaXJtd2FyZSBpbWFnZSB0byBS QU0gZm9yIGV4ZWN1dGlvbiBieSB0aGUgbWljcm9jb250cm9sbGVyLgorICoKKyAqIEd1QyBGaXJt d2FyZSBsYXlvdXQ6CisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIC0tLS0K KyAqIHwgICAgICAgICAgQ1NTIGhlYWRlciAgICAgICAgICAgfCAgMTI4QgorICogfCBjb250YWlu cyBtYWpvci9taW5vciB2ZXJzaW9uICB8CisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSsgIC0tLS0KKyAqIHwgICAgICAgICAgICAgdUNvZGUgICAgICAgICAgICAgfAorICogKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAtLS0tCisgKiB8ICAgICAgICAgUlNBIHNp Z25hdHVyZSAgICAgICAgIHwgIDI1NkIKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKyAgLS0tLQorICogfCAgICAgICAgIFJTQSBwdWJsaWMgS2V5ICAgICAgICB8ICAyNTZCCisg KiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIC0tLS0KKyAqIHwgICAgICAgUHVi bGljIGtleSBtb2R1bHVzICAgICAgfCAgICA0QgorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rICAtLS0tCisgKgorICogQXJjaGl0ZWN0dXJhbGx5LCB0aGUgRE1BIGVuZ2luZSBp cyBiaWRpcmVjdGlvbmFsLCBhbmQgY2FuIHBvdGVudGlhbGx5IGV2ZW4KKyAqIHRyYW5zZmVyIGJl dHdlZW4gR1RUIGxvY2F0aW9ucy4gVGhpcyBmdW5jdGlvbmFsaXR5IGlzIGxlZnQgb3V0IG9mIHRo ZSBBUEkKKyAqIGZvciBub3cgYXMgdGhlcmUgaXMgbm8gbmVlZCBmb3IgaXQuCisgKgorICogTm90 ZSB0aGF0IEd1QyBuZWVkcyB0aGUgQ1NTIGhlYWRlciBwbHVzIHVLZXJuZWwgY29kZSB0byBiZSBj b3BpZWQgYnkgdGhlCisgKiBETUEgZW5naW5lIGluIG9uZSBvcGVyYXRpb24sIHdoZXJlYXMgdGhl IFJTQSBzaWduYXR1cmUgaXMgbG9hZGVkIHZpYSBNTUlPLgorICovCisKKyNkZWZpbmUgVU9TX0NT U19IRUFERVJfT0ZGU0VUCQkwCisjZGVmaW5lIFVPU19WRVJfTUlOT1JfT0ZGU0VUCQkweDQ0Cisj ZGVmaW5lIFVPU19WRVJfTUFKT1JfT0ZGU0VUCQkweDQ2CisjZGVmaW5lIFVPU19DU1NfSEVBREVS X1NJWkUJCTB4ODAKKyNkZWZpbmUgVU9TX1JTQV9TSUdfU0laRQkJMHgxMDAKKyNkZWZpbmUgVU9T X0NTU19TSUdOSU5HX1NJWkUJCTB4MjA0CisKK3N0YXRpYyBpbnQgZ3VjX3Vjb2RlX3hmZXJfZG1h KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlzdHJ1Y3QgaW50ZWxfZ3Vj X2Z3ICpndWNfZncgPSAmZGV2X3ByaXYtPmd1Yy5ndWNfZnc7CisJc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKmZ3X29iaiA9IGd1Y19mdy0+Z3VjX2Z3X29iajsKKwl1bnNpZ25lZCBsb25nIG9m ZnNldDsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNnID0gZndfb2JqLT5wYWdlczsKKwl1MzIgc3RhdHVz LCB1Y29kZV9zaXplLCByc2FbVU9TX1JTQV9TSUdfU0laRSAvIHNpemVvZih1MzIpXTsKKwlpbnQg aSwgcmV0ID0gMDsKKworCS8qIHVDb2RlIHNpemUsIGFsc28gaXMgd2hlcmUgUlNBIHNpZ25hdHVy ZSBzdGFydHMgKi8KKwlvZmZzZXQgPSB1Y29kZV9zaXplID0gZ3VjX2Z3LT5ndWNfZndfc2l6ZSAt IFVPU19DU1NfU0lHTklOR19TSVpFOworCUk5MTVfV1JJVEUoRE1BX0NPUFlfU0laRSwgdWNvZGVf c2l6ZSk7CisKKwkvKiBDb3B5IFJTQSBzaWduYXR1cmUgZnJvbSB0aGUgZncgaW1hZ2UgdG8gSFcg Zm9yIHZlcmlmaWNhdGlvbiAqLworCXNnX3Bjb3B5X3RvX2J1ZmZlcihzZy0+c2dsLCBzZy0+bmVu dHMsIHJzYSwgVU9TX1JTQV9TSUdfU0laRSwgb2Zmc2V0KTsKKwlmb3IgKGkgPSAwOyBpIDwgVU9T X1JTQV9TSUdfU0laRSAvIHNpemVvZih1MzIpOyBpKyspCisJCUk5MTVfV1JJVEUoVU9TX1JTQV9T Q1JBVENIXzAgKyBpICogc2l6ZW9mKHUzMiksIHJzYVtpXSk7CisKKwkvKiBTZXQgdGhlIHNvdXJj ZSBhZGRyZXNzIGZvciB0aGUgbmV3IGJsb2IgKi8KKwlvZmZzZXQgPSBpOTE1X2dlbV9vYmpfZ2d0 dF9vZmZzZXQoZndfb2JqKTsKKwlJOTE1X1dSSVRFKERNQV9BRERSXzBfTE9XLCBsb3dlcl8zMl9i aXRzKG9mZnNldCkpOworCUk5MTVfV1JJVEUoRE1BX0FERFJfMF9ISUdILCB1cHBlcl8zMl9iaXRz KG9mZnNldCkgJiAweEZGRkYpOworCisJLyoKKwkgKiBTZXQgdGhlIERNQSBkZXN0aW5hdGlvbi4g Q3VycmVudCB1Q29kZSBleHBlY3RzIHRoZSBjb2RlIHRvIGJlCisJICogbG9hZGVkIGF0IDhrOyBs b2NhdGlvbnMgYmVsb3cgdGhpcyBhcmUgdXNlZCBmb3IgdGhlIHN0YWNrLgorCSAqLworCUk5MTVf V1JJVEUoRE1BX0FERFJfMV9MT1csIDB4MjAwMCk7CisJSTkxNV9XUklURShETUFfQUREUl8xX0hJ R0gsIERNQV9BRERSRVNTX1NQQUNFX1dPUENNKTsKKworCS8qIEZpbmFsbHkgc3RhcnQgdGhlIERN QSAqLworCUk5MTVfV1JJVEUoRE1BX0NUUkwsIF9NQVNLRURfQklUX0VOQUJMRShVT1NfTU9WRSB8 IFNUQVJUX0RNQSkpOworCisJLyoKKwkgKiBTcGluLXdhaXQgZm9yIHRoZSBETUEgdG8gY29tcGxl dGUgJiB0aGUgR3VDIHRvIHN0YXJ0IHVwLgorCSAqIE5COiBEb2NzIHJlY29tbWVuZCBub3QgdXNp bmcgdGhlIGludGVycnVwdCBmb3IgY29tcGxldGlvbi4KKwkgKiBNZWFzdXJlbWVudHMgaW5kaWNh dGUgdGhpcyBzaG91bGQgdGFrZSBubyBtb3JlIHRoYW4gMjBtcywgc28gYQorCSAqIHRpbWVvdXQg aGVyZSBpbmRpY2F0ZXMgdGhhdCB0aGUgR3VDIGhhcyBmYWlsZWQgYW5kIGlzIHVudXNhYmxlLgor CSAqIChIaWdoZXIgbGV2ZWxzIG9mIHRoZSBkcml2ZXIgd2lsbCBhdHRlbXB0IHRvIGZhbGwgYmFj ayB0bworCSAqIGV4ZWNsaXN0IG1vZGUgaWYgdGhpcyBoYXBwZW5zLikKKwkgKi8KKwlyZXQgPSB3 YWl0X2Zvcl9hdG9taWMoZ3VjX3Vjb2RlX3Jlc3BvbnNlKGRldl9wcml2LCAmc3RhdHVzKSwgMTAw KTsKKworCURSTV9ERUJVR19EUklWRVIoIkRNQSBzdGF0dXMgMHgleCwgR3VDIHN0YXR1cyAweCV4 XG4iLAorCQkJSTkxNV9SRUFEKERNQV9DVFJMKSwgc3RhdHVzKTsKKworCWlmICgoc3RhdHVzICYg R1NfQk9PVFJPTV9NQVNLKSA9PSBHU19CT09UUk9NX1JTQV9GQUlMRUQpIHsKKwkJRFJNX0VSUk9S KCJHdUMgZmlybXdhcmUgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlsZWRcbiIpOworCQlyZXQg PSAtRU5PRVhFQzsKKwl9CisKKwlEUk1fREVCVUdfRFJJVkVSKCJyZXR1cm5pbmcgJWRcbiIsIHJl dCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogTG9hZCB0aGUgR3VDIGZpcm13YXJlIGJs b2IgaW50byB0aGUgTWludXRlSUEuCisgKi8KK3N0YXRpYyBpbnQgZ3VjX3Vjb2RlX3hmZXIoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCXN0cnVjdCBpbnRlbF9ndWNfZncg Kmd1Y19mdyA9ICZkZXZfcHJpdi0+Z3VjLmd1Y19mdzsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gZGV2X3ByaXYtPmRldjsKKwlpbnQgcmV0OworCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3Nl dF90b19ndHRfZG9tYWluKGd1Y19mdy0+Z3VjX2Z3X29iaiwgZmFsc2UpOworCWlmIChyZXQpIHsK KwkJRFJNX0RFQlVHX0RSSVZFUigic2V0LWRvbWFpbiBmYWlsZWQgJWRcbiIsIHJldCk7CisJCXJl dHVybiByZXQ7CisJfQorCisJcmV0ID0gaTkxNV9nZW1fb2JqX2dndHRfcGluKGd1Y19mdy0+Z3Vj X2Z3X29iaiwgMCwgMCk7CisJaWYgKHJldCkgeworCQlEUk1fREVCVUdfRFJJVkVSKCJwaW4gZmFp bGVkICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIEludmFsaWRhdGUgR3VD IFRMQiB0byBsZXQgR3VDIHRha2UgdGhlIGxhdGVzdCB1cGRhdGVzIHRvIEdUVC4gKi8KKwlJOTE1 X1dSSVRFKEdFTjhfR1RDUiwgR0VOOF9HVENSX0lOVkFMSURBVEUpOworCisJaW50ZWxfdW5jb3Jl X2ZvcmNld2FrZV9nZXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9BTEwpOworCisJLyogaW5pdCBXT1BD TSAqLworCUk5MTVfV1JJVEUoR1VDX1dPUENNX1NJWkUsIEdVQ19XT1BDTV9TSVpFX1ZBTFVFKTsK KwlJOTE1X1dSSVRFKERNQV9HVUNfV09QQ01fT0ZGU0VULCBHVUNfV09QQ01fT0ZGU0VUX1ZBTFVF KTsKKworCS8qIEVuYWJsZSBNSUEgY2FjaGluZy4gR3VDIGNsb2NrIGdhdGluZyBpcyBkaXNhYmxl ZC4gKi8KKwlJOTE1X1dSSVRFKEdVQ19TSElNX0NPTlRST0wsIEdVQ19TSElNX0NPTlRST0xfVkFM VUUpOworCisJLyogV2FDNkRpc2FsbG93QnlHZnhQYXVzZSovCisJSTkxNV9XUklURShHRU42X0dG WFBBVVNFLCAweDMwRkZGKTsKKworCWlmIChJU19CUk9YVE9OKGRldikpCisJCUk5MTVfV1JJVEUo R0VOOUxQX0dUX1BNX0NPTkZJRywgR1RfRE9PUkJFTExfRU5BQkxFKTsKKwllbHNlCisJCUk5MTVf V1JJVEUoR0VOOV9HVF9QTV9DT05GSUcsIEdUX0RPT1JCRUxMX0VOQUJMRSk7CisKKwlpZiAoSVNf R0VOOShkZXYpKSB7CisJCS8qIERPUCBDbG9jayBHYXRpbmcgRW5hYmxlIGZvciBHdUMgY2xvY2tz ICovCisJCUk5MTVfV1JJVEUoR0VON19NSVNDQ1BDVEwsIChHRU44X0RPUF9DTE9DS19HQVRFX0dV Q19FTkFCTEUgfAorCQkJCQkgICAgSTkxNV9SRUFEKEdFTjdfTUlTQ0NQQ1RMKSkpOworCisJCS8q IGFsbG93cyBmb3IgNXVzIGJlZm9yZSBHVCBjYW4gZ28gdG8gUkM2ICovCisJCUk5MTVfV1JJVEUo R1VDX0FSQVRfQzZESVMsIDB4MUZGKTsKKwl9CisKKwlzZXRfZ3VjX2luaXRfcGFyYW1zKGRldl9w cml2KTsKKworCXJldCA9IGd1Y191Y29kZV94ZmVyX2RtYShkZXZfcHJpdik7CisKKwlpbnRlbF91 bmNvcmVfZm9yY2V3YWtlX3B1dChkZXZfcHJpdiwgRk9SQ0VXQUtFX0FMTCk7CisKKwkvKgorCSAq IFdlIGtlZXAgdGhlIG9iamVjdCBwYWdlcyBmb3IgcmV1c2UgZHVyaW5nIHJlc3VtZS4gQnV0IHdl IGNhbiB1bnBpbiBpdAorCSAqIG5vdyB0aGF0IERNQSBoYXMgY29tcGxldGVkLCBzbyBpdCBkb2Vz bid0IGNvbnRpbnVlIHRvIHRha2UgdXAgc3BhY2UuCisJICovCisJaTkxNV9nZW1fb2JqZWN0X2dn dHRfdW5waW4oZ3VjX2Z3LT5ndWNfZndfb2JqKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgor ICogaW50ZWxfZ3VjX3Vjb2RlX2xvYWQoKSAtIGxvYWQgR3VDIHVDb2RlIGludG8gdGhlIGRldmlj ZQorICogQGRldjoJZHJtIGRldmljZQorICoKKyAqIENhbGxlZCBmcm9tIGdlbV9pbml0X2h3KCkg ZHVyaW5nIGRyaXZlciBsb2FkaW5nIGFuZCBhbHNvIGFmdGVyIGEgR1BVIHJlc2V0LgorICoKKyAq IE9uIHRoZSBmaXJzdCBjYWxsIG9ubHksIHRoaXMgd2lsbCBmZXRjaCB0aGUgYmxvYiBmcm9tIHRo ZSBmaWxlc3lzdGVtOworICogdGhlcmVhZnRlciwgd2Ugd2lsbCBhbHJlYWR5IGVpdGhlciBoYXZl IHRoZSBibG9iIGluIGEgR0VNIG9iamVjdCwgb3IKKyAqIGhhdmUgZGV0ZXJtaW5lZCB0aGF0IG5v IHZhbGlkIGZpcm13YXJlIGltYWdlIGNvdWxkIGJlIGZvdW5kLgorICoKKyAqIElmIHdlIGhhdmUg YSBnb29kIGZpcm13YXJlIGltYWdlLCB0cmFuc2ZlciBpdCB0byB0aGUgaC93LgorICoKKyAqIFJl dHVybjoJbm9uLXplcm8gY29kZSBvbiBlcnJvcgorICovCitpbnQgaW50ZWxfZ3VjX3Vjb2RlX2xv YWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9ndWNfZncgKmd1Y19m dyA9ICZkZXZfcHJpdi0+Z3VjLmd1Y19mdzsKKwlpbnQgZXJyID0gMDsKKworCURSTV9ERUJVR19E UklWRVIoIkd1QyBmdyBzdGF0dXM6IGZldGNoICVzLCBsb2FkICVzXG4iLAorCQlpbnRlbF9ndWNf Zndfc3RhdHVzX3JlcHIoZ3VjX2Z3LT5ndWNfZndfZmV0Y2hfc3RhdHVzKSwKKwkJaW50ZWxfZ3Vj X2Z3X3N0YXR1c19yZXByKGd1Y19mdy0+Z3VjX2Z3X2xvYWRfc3RhdHVzKSk7CisKKwlpZiAoZ3Vj X2Z3LT5ndWNfZndfZmV0Y2hfc3RhdHVzID09IEdVQ19GSVJNV0FSRV9OT05FKQorCQlyZXR1cm4g MDsKKworCWlmIChndWNfZnctPmd1Y19md19mZXRjaF9zdGF0dXMgPT0gR1VDX0ZJUk1XQVJFX1NV Q0NFU1MgJiYKKwkgICAgZ3VjX2Z3LT5ndWNfZndfbG9hZF9zdGF0dXMgPT0gR1VDX0ZJUk1XQVJF X0ZBSUwpCisJCXJldHVybiAtRU5PRVhFQzsKKworCWd1Y19mdy0+Z3VjX2Z3X2xvYWRfc3RhdHVz ID0gR1VDX0ZJUk1XQVJFX1BFTkRJTkc7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJHdUMgZncgZmV0 Y2ggc3RhdHVzICVzXG4iLAorCQlpbnRlbF9ndWNfZndfc3RhdHVzX3JlcHIoZ3VjX2Z3LT5ndWNf ZndfZmV0Y2hfc3RhdHVzKSk7CisKKwlzd2l0Y2ggKGd1Y19mdy0+Z3VjX2Z3X2ZldGNoX3N0YXR1 cykgeworCWNhc2UgR1VDX0ZJUk1XQVJFX0ZBSUw6CisJCS8qIHNvbWV0aGluZyB3ZW50IHdyb25n IDooICovCisJCWVyciA9IC1FSU87CisJCWdvdG8gZmFpbDsKKworCWNhc2UgR1VDX0ZJUk1XQVJF X05PTkU6CisJY2FzZSBHVUNfRklSTVdBUkVfUEVORElORzoKKwlkZWZhdWx0OgorCQkvKiAiY2Fu J3QgaGFwcGVuIiAqLworCQlXQVJOX09OQ0UoMSwgIkd1QyBmdyAlcyBpbnZhbGlkIGd1Y19md19m ZXRjaF9zdGF0dXMgJXMgWyVkXVxuIiwKKwkJCWd1Y19mdy0+Z3VjX2Z3X3BhdGgsCisJCQlpbnRl bF9ndWNfZndfc3RhdHVzX3JlcHIoZ3VjX2Z3LT5ndWNfZndfZmV0Y2hfc3RhdHVzKSwKKwkJCWd1 Y19mdy0+Z3VjX2Z3X2ZldGNoX3N0YXR1cyk7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBmYWls OworCisJY2FzZSBHVUNfRklSTVdBUkVfU1VDQ0VTUzoKKwkJYnJlYWs7CisJfQorCisJZXJyID0g Z3VjX3Vjb2RlX3hmZXIoZGV2X3ByaXYpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDsKKworCWd1 Y19mdy0+Z3VjX2Z3X2xvYWRfc3RhdHVzID0gR1VDX0ZJUk1XQVJFX1NVQ0NFU1M7CisKKwlEUk1f REVCVUdfRFJJVkVSKCJHdUMgZncgc3RhdHVzOiBmZXRjaCAlcywgbG9hZCAlc1xuIiwKKwkJaW50 ZWxfZ3VjX2Z3X3N0YXR1c19yZXByKGd1Y19mdy0+Z3VjX2Z3X2ZldGNoX3N0YXR1cyksCisJCWlu dGVsX2d1Y19md19zdGF0dXNfcmVwcihndWNfZnctPmd1Y19md19sb2FkX3N0YXR1cykpOworCisJ cmV0dXJuIDA7CisKK2ZhaWw6CisJaWYgKGd1Y19mdy0+Z3VjX2Z3X2xvYWRfc3RhdHVzID09IEdV Q19GSVJNV0FSRV9QRU5ESU5HKQorCQlndWNfZnctPmd1Y19md19sb2FkX3N0YXR1cyA9IEdVQ19G SVJNV0FSRV9GQUlMOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgZ3VjX2Z3X2Zl dGNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBpbnRlbF9ndWNfZncgKmd1Y19mdykK K3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCWNvbnN0IHN0cnVjdCBmaXJt d2FyZSAqZnc7CisJY29uc3QgdTggKmNzc19oZWFkZXI7CisJY29uc3Qgc2l6ZV90IG1pbnNpemUg PSBVT1NfQ1NTX0hFQURFUl9TSVpFICsgVU9TX0NTU19TSUdOSU5HX1NJWkU7CisJY29uc3Qgc2l6 ZV90IG1heHNpemUgPSBHVUNfV09QQ01fU0laRV9WQUxVRSArIFVPU19DU1NfU0lHTklOR19TSVpF CisJCQktIDB4ODAwMDsgLyogMzJrIHJlc2VydmVkICg4SyBzdGFjayArIDI0ayBjb250ZXh0KSAq LworCWludCBlcnI7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJiZWZvcmUgcmVxdWVzdGluZyBmaXJt d2FyZTogR3VDIGZ3IGZldGNoIHN0YXR1cyAlc1xuIiwKKwkJaW50ZWxfZ3VjX2Z3X3N0YXR1c19y ZXByKGd1Y19mdy0+Z3VjX2Z3X2ZldGNoX3N0YXR1cykpOworCisJZXJyID0gcmVxdWVzdF9maXJt d2FyZSgmZncsIGd1Y19mdy0+Z3VjX2Z3X3BhdGgsICZkZXYtPnBkZXYtPmRldik7CisJaWYgKGVy cikKKwkJZ290byBmYWlsOworCWlmICghZncpCisJCWdvdG8gZmFpbDsKKworCURSTV9ERUJVR19E UklWRVIoImZldGNoIEd1QyBmdyBmcm9tICVzIHN1Y2NlZWRlZCwgZncgJXBcbiIsCisJCWd1Y19m dy0+Z3VjX2Z3X3BhdGgsIGZ3KTsKKwlEUk1fREVCVUdfRFJJVkVSKCJmaXJtd2FyZSBmaWxlIHNp emUgJXp1IChtaW5pbXVtICV6dSwgbWF4aW11bSAlenUpXG4iLAorCQlmdy0+c2l6ZSwgbWluc2l6 ZSwgbWF4c2l6ZSk7CisKKwkvKiBDaGVjayB0aGUgc2l6ZSBvZiB0aGUgYmxvYiBiZWZvZSBleGFt aW5pbmcgYnVmZmVyIGNvbnRlbnRzICovCisJaWYgKGZ3LT5zaXplIDwgbWluc2l6ZSB8fCBmdy0+ c2l6ZSA+IG1heHNpemUpCisJCWdvdG8gZmFpbDsKKworCS8qCisJICogVGhlIEd1QyBmaXJtd2Fy ZSBpbWFnZSBoYXMgdGhlIHZlcnNpb24gbnVtYmVyIGVtYmVkZGVkIGF0IGEgd2VsbC1rbm93bgor CSAqIG9mZnNldCB3aXRoaW4gdGhlIGZpcm13YXJlIGJsb2I7IG5vdGUgdGhhdCBtYWpvciAvIG1p bm9yIHZlcnNpb24gYXJlCisJICogVFdPIGJ5dGVzIGVhY2ggKGkuZS4gdTE2KSwgYWx0aG91Z2gg YWxsIHBvaW50ZXJzIGFuZCBvZmZzZXRzIGFyZSBkZWZpbmVkCisJICogaW4gdGVybXMgb2YgYnl0 ZXMgKHU4KS4KKwkgKi8KKwljc3NfaGVhZGVyID0gZnctPmRhdGEgKyBVT1NfQ1NTX0hFQURFUl9P RkZTRVQ7CisJZ3VjX2Z3LT5ndWNfZndfbWFqb3JfZm91bmQgPSAqKHUxNiAqKShjc3NfaGVhZGVy ICsgVU9TX1ZFUl9NQUpPUl9PRkZTRVQpOworCWd1Y19mdy0+Z3VjX2Z3X21pbm9yX2ZvdW5kID0g Kih1MTYgKikoY3NzX2hlYWRlciArIFVPU19WRVJfTUlOT1JfT0ZGU0VUKTsKKworCWlmIChndWNf ZnctPmd1Y19md19tYWpvcl9mb3VuZCAhPSBndWNfZnctPmd1Y19md19tYWpvcl93YW50ZWQgfHwK KwkgICAgZ3VjX2Z3LT5ndWNfZndfbWlub3JfZm91bmQgPCBndWNfZnctPmd1Y19md19taW5vcl93 YW50ZWQpIHsKKwkJRFJNX0VSUk9SKCJHdUMgZmlybXdhcmUgdmVyc2lvbiAlZC4lZCwgcmVxdWly ZWQgJWQuJWRcbiIsCisJCQlndWNfZnctPmd1Y19md19tYWpvcl9mb3VuZCwgZ3VjX2Z3LT5ndWNf ZndfbWlub3JfZm91bmQsCisJCQlndWNfZnctPmd1Y19md19tYWpvcl93YW50ZWQsIGd1Y19mdy0+ Z3VjX2Z3X21pbm9yX3dhbnRlZCk7CisJCWVyciA9IC1FTk9FWEVDOworCQlnb3RvIGZhaWw7CisJ fQorCisJRFJNX0RFQlVHX0RSSVZFUigiZmlybXdhcmUgdmVyc2lvbiAlZC4lZCBPSyAobWluaW11 bSAlZC4lZClcbiIsCisJCQlndWNfZnctPmd1Y19md19tYWpvcl9mb3VuZCwgZ3VjX2Z3LT5ndWNf ZndfbWlub3JfZm91bmQsCisJCQlndWNfZnctPmd1Y19md19tYWpvcl93YW50ZWQsIGd1Y19mdy0+ Z3VjX2Z3X21pbm9yX3dhbnRlZCk7CisKKwlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX2Zy b21fZGF0YShkZXYsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7CisJaWYgKElTX0VSUl9PUl9OVUxMKG9i aikpIHsKKwkJZXJyID0gb2JqID8gUFRSX0VSUihvYmopIDogLUVOT01FTTsKKwkJZ290byBmYWls OworCX0KKworCWd1Y19mdy0+Z3VjX2Z3X29iaiA9IG9iajsKKwlndWNfZnctPmd1Y19md19zaXpl ID0gZnctPnNpemU7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJHdUMgZncgZmV0Y2ggc3RhdHVzIFNV Q0NFU1MsIG9iaiAlcFxuIiwKKwkJCWd1Y19mdy0+Z3VjX2Z3X29iaik7CisKKwlyZWxlYXNlX2Zp cm13YXJlKGZ3KTsKKwlndWNfZnctPmd1Y19md19mZXRjaF9zdGF0dXMgPSBHVUNfRklSTVdBUkVf U1VDQ0VTUzsKKwlyZXR1cm47CisKK2ZhaWw6CisJRFJNX0RFQlVHX0RSSVZFUigiR3VDIGZ3IGZl dGNoIHN0YXR1cyBGQUlMOyBlcnIgJWQsIGZ3ICVwLCBvYmogJXBcbiIsCisJCWVyciwgZncsIGd1 Y19mdy0+Z3VjX2Z3X29iaik7CisJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZmV0Y2ggR3VDIGZpcm13 YXJlIGZyb20gJXMgKGVycm9yICVkKVxuIiwKKwkJICBndWNfZnctPmd1Y19md19wYXRoLCBlcnIp OworCisJb2JqID0gZ3VjX2Z3LT5ndWNfZndfb2JqOworCWlmIChvYmopCisJCWRybV9nZW1fb2Jq ZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOworCWd1Y19mdy0+Z3VjX2Z3X29iaiA9IE5VTEw7 CisKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsJCS8qIE9LIGV2ZW4gaWYgZncgaXMgTlVMTCAqLwor CWd1Y19mdy0+Z3VjX2Z3X2ZldGNoX3N0YXR1cyA9IEdVQ19GSVJNV0FSRV9GQUlMOworfQorCisv KioKKyAqIGludGVsX2d1Y191Y29kZV9pbml0KCkgLSBkZWZpbmUgcGFyYW1ldGVycyBhbmQgZmV0 Y2ggZmlybXdhcmUKKyAqIEBkZXY6CWRybSBkZXZpY2UKKyAqCisgKiBDYWxsZWQgZWFybHkgZHVy aW5nIGRyaXZlciBsb2FkLCBidXQgYWZ0ZXIgR0VNIGlzIGluaXRpYWxpc2VkLgorICogVGhlIGRl dmljZSBzdHJ1Y3RfbXV0ZXggbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIsIGFzIHdlJ3JlCisg KiBnb2luZyB0byBhbGxvY2F0ZSBhIEdFTSBvYmplY3QgdG8gaG9sZCB0aGUgZmlybXdhcmUgaW1h Z2UuCisgKgorICogVGhlIGZpcm13YXJlIHdpbGwgYmUgdHJhbnNmZXJyZWQgdG8gdGhlIEd1Qydz IG1lbW9yeSBsYXRlciwKKyAqIHdoZW4gaW50ZWxfZ3VjX3Vjb2RlX2xvYWQoKSBpcyBjYWxsZWQu CisgKi8KK3ZvaWQgaW50ZWxfZ3VjX3Vjb2RlX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikK K3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRl OworCXN0cnVjdCBpbnRlbF9ndWNfZncgKmd1Y19mdyA9ICZkZXZfcHJpdi0+Z3VjLmd1Y19mdzsK Kwljb25zdCBjaGFyICpmd19wYXRoOworCisJaWYgKCFIQVNfR1VDX1NDSEVEKGRldikpCisJCWk5 MTUuZW5hYmxlX2d1Y19zdWJtaXNzaW9uID0gZmFsc2U7CisKKwlpZiAoIUhBU19HVUNfVUNPREUo ZGV2KSkgeworCQlmd19wYXRoID0gTlVMTDsKKwl9IGVsc2UgaWYgKElTX1NLWUxBS0UoZGV2KSkg eworCQlmd19wYXRoID0gSTkxNV9TS0xfR1VDX1VDT0RFOworCQlndWNfZnctPmd1Y19md19tYWpv cl93YW50ZWQgPSAzOworCQlndWNfZnctPmd1Y19md19taW5vcl93YW50ZWQgPSAwOworCX0gZWxz ZSB7CisJCWk5MTUuZW5hYmxlX2d1Y19zdWJtaXNzaW9uID0gZmFsc2U7CisJCWZ3X3BhdGggPSAi IjsJLyogdW5rbm93biBkZXZpY2UgKi8KKwl9CisKKwlndWNfZnctPmd1Y19kZXYgPSBkZXY7CisJ Z3VjX2Z3LT5ndWNfZndfcGF0aCA9IGZ3X3BhdGg7CisJZ3VjX2Z3LT5ndWNfZndfZmV0Y2hfc3Rh dHVzID0gR1VDX0ZJUk1XQVJFX05PTkU7CisJZ3VjX2Z3LT5ndWNfZndfbG9hZF9zdGF0dXMgPSBH VUNfRklSTVdBUkVfTk9ORTsKKworCWlmIChmd19wYXRoID09IE5VTEwpCisJCXJldHVybjsKKwor CWlmICgqZndfcGF0aCA9PSAnXDAnKSB7CisJCURSTV9FUlJPUigiTm8gR3VDIGZpcm13YXJlIGtu b3duIGZvciB0aGlzIHBsYXRmb3JtXG4iKTsKKwkJZ3VjX2Z3LT5ndWNfZndfZmV0Y2hfc3RhdHVz ID0gR1VDX0ZJUk1XQVJFX0ZBSUw7CisJCXJldHVybjsKKwl9CisKKwlndWNfZnctPmd1Y19md19m ZXRjaF9zdGF0dXMgPSBHVUNfRklSTVdBUkVfUEVORElORzsKKwlEUk1fREVCVUdfRFJJVkVSKCJH dUMgZmlybXdhcmUgcGVuZGluZywgcGF0aCAlc1xuIiwgZndfcGF0aCk7CisJZ3VjX2Z3X2ZldGNo KGRldiwgZ3VjX2Z3KTsKKwkvKiBzdGF0dXMgbXVzdCBub3cgYmUgRkFJTCBvciBTVUNDRVNTICov Cit9CisKKy8qKgorICogaW50ZWxfZ3VjX3Vjb2RlX2ZpbmkoKSAtIGNsZWFuIHVwIGFsbCBhbGxv Y2F0ZWQgcmVzb3VyY2VzCisgKiBAZGV2Oglkcm0gZGV2aWNlCisgKi8KK3ZvaWQgaW50ZWxfZ3Vj X3Vjb2RlX2Zpbmkoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9ndWNf ZncgKmd1Y19mdyA9ICZkZXZfcHJpdi0+Z3VjLmd1Y19mdzsKKworCWlmIChndWNfZnctPmd1Y19m d19vYmopCisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZndWNfZnctPmd1Y19md19vYmot PmJhc2UpOworCWd1Y19mdy0+Z3VjX2Z3X29iaiA9IE5VTEw7CisKKwlndWNfZnctPmd1Y19md19m ZXRjaF9zdGF0dXMgPSBHVUNfRklSTVdBUkVfTk9ORTsKK30KLS0gCjEuOS4xCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBs aXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=