From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Ganesan, Aravind" Subject: [PATCH 3/3] drm/msm: a4xx support for msm-drm Date: Fri, 31 Oct 2014 09:08:31 -0600 Message-ID: <5453A5EF.7060802@codeaurora.org> References: <5452F4E2.50506@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <5452F4E2.50506@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: freedreno@lists.freedesktop.org, Rob Clark Cc: linux-arm-msm@vger.kernel.org, rishib@quicinc.com, dri-devel@lists.freedesktop.org List-Id: linux-arm-msm@vger.kernel.org QWRkZWQgYTR4eCBHUFUgc3VwcG9ydC4KClNpZ25lZC1vZmYtYnk6IEFyYXZpbmQgR2FuZXNhbiA8 YXJhdmluZGdAY29kZWF1cm9yYS5vcmc+Ci0tLQpSZXNlbmQgdGhlIHBhdGNoLXNldCB3aXRoIHRo ZSBzYW1lIHRocmVhZC1pZApSZXNlbmQgaW4gcGF0Y2gtc2V0IGZvcm1hdCBhbmQgd2l0aCBkcmkt ZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnIG9uCnRoZSBDQy4KIGRyaXZlcnMvZ3B1L2RybS9t c20vTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Fk cmVuby9hNHh4X2dwdS5jICAgICAgfCA2MjAKKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IGRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E0eHhfZ3B1LmggICAgICB8ICAzNCArKwogZHJp dmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2RldmljZS5jIHwgIDEzICsKIGRyaXZlcnMv Z3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUuYyAgICB8ICAgMiArLQogZHJpdmVycy9ncHUv ZHJtL21zbS9hZHJlbm8vYWRyZW5vX2dwdS5oICAgIHwgIDE0ICstCiA2IGZpbGVzIGNoYW5nZWQs IDY4MSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E0eHhfZ3B1LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNHh4X2dwdS5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21zbS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKaW5k ZXggMjBiN2VkYS4uMjEwMjBmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtl ZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCkBAIC03LDYgKzcsNyBAQCBt c20teSA6PSBcCiAJYWRyZW5vL2FkcmVub19kZXZpY2UubyBcCiAJYWRyZW5vL2FkcmVub19ncHUu byBcCiAJYWRyZW5vL2EzeHhfZ3B1Lm8gXAorCWFkcmVuby9hNHh4X2dwdS5vIFwKIAloZG1pL2hk bWkubyBcCiAJaGRtaS9oZG1pX2F1ZGlvLm8gXAogCWhkbWkvaGRtaV9icmlkZ2UubyBcCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNHh4X2dwdS5jCmIvZHJpdmVycy9n cHUvZHJtL21zbS9hZHJlbm8vYTR4eF9ncHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi41MGNiYWY0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9h ZHJlbm8vYTR4eF9ncHUuYwpAQCAtMCwwICsxLDYyMCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE0 IFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg KgorICovCisjaW5jbHVkZSAiYTR4eF9ncHUuaCIKKyNpZmRlZiBDT05GSUdfTVNNX09DTUVNCisj ICBpbmNsdWRlIDxzb2MvcWNvbS9vY21lbS5oPgorI2VuZGlmCisKKyNkZWZpbmUgQTRYWF9JTlQw X01BU0sgXAorCShBNFhYX0lOVDBfUkJCTV9BSEJfRVJST1IgfCAgICAgICAgXAorCSBBNFhYX0lO VDBfUkJCTV9BVEJfQlVTX09WRVJGTE9XIHwgXAorCSBBNFhYX0lOVDBfQ1BfVDBfUEFDS0VUX0lO X0lCIHwgICAgXAorCSBBNFhYX0lOVDBfQ1BfT1BDT0RFX0VSUk9SIHwgICAgICAgXAorCSBBNFhY X0lOVDBfQ1BfUkVTRVJWRURfQklUX0VSUk9SIHwgXAorCSBBNFhYX0lOVDBfQ1BfSFdfRkFVTFQg fCAgICAgICAgICAgXAorCSBBNFhYX0lOVDBfQ1BfSUIxX0lOVCB8ICAgICAgICAgICAgXAorCSBB NFhYX0lOVDBfQ1BfSUIyX0lOVCB8ICAgICAgICAgICAgXAorCSBBNFhYX0lOVDBfQ1BfUkJfSU5U IHwgICAgICAgICAgICAgXAorCSBBNFhYX0lOVDBfQ1BfUkVHX1BST1RFQ1RfRkFVTFQgfCAgXAor CSBBNFhYX0lOVDBfQ1BfQUhCX0VSUk9SX0hBTFQgfCAgICAgXAorCSBBNFhYX0lOVDBfVUNIRV9P T0JfQUNDRVNTKQorCitleHRlcm4gYm9vbCBoYW5nX2RlYnVnOworc3RhdGljIHZvaWQgYTR4eF9k dW1wKHN0cnVjdCBtc21fZ3B1ICpncHUpOworCisvKgorICogYTR4eF9lbmFibGVfaHdjZygpIC0g UHJvZ3JhbSB0aGUgY2xvY2sgY29udHJvbCByZWdpc3RlcnMKKyAqIEBkZXZpY2U6IFRoZSBhZHJl bm8gZGV2aWNlIHBvaW50ZXIKKyAqLworc3RhdGljIHZvaWQgYTR4eF9lbmFibGVfaHdjZyhzdHJ1 Y3QgbXNtX2dwdSAqZ3B1KQoreworCXN0cnVjdCBhZHJlbm9fZ3B1ICphZHJlbm9fZ3B1ID0gdG9f YWRyZW5vX2dwdShncHUpOworCXVuc2lnbmVkIGludCBpOworCWZvciAoaSA9IDA7IGkgPCA0OyBp KyspCisJCWdwdV93cml0ZShncHUsIFJFR19BNFhYX1JCQk1fQ0xPQ0tfQ1RMX1RQKGkpLCAweDAy MjIyMjAyKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQlncHVfd3JpdGUoZ3B1LCBSRUdf QTRYWF9SQkJNX0NMT0NLX0NUTDJfVFAoaSksIDB4MDAwMDIyMjIpOworCWZvciAoaSA9IDA7IGkg PCA0OyBpKyspCisJCWdwdV93cml0ZShncHUsIFJFR19BNFhYX1JCQk1fQ0xPQ0tfSFlTVF9UUChp KSwgMHgwRTczOUNFNyk7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJZ3B1X3dyaXRlKGdw dSwgUkVHX0E0WFhfUkJCTV9DTE9DS19ERUxBWV9UUChpKSwgMHgwMDExMTExMSk7CisJZm9yIChp ID0gMDsgaSA8IDQ7IGkrKykKKwkJZ3B1X3dyaXRlKGdwdSwgUkVHX0E0WFhfUkJCTV9DTE9DS19D VExfU1AoaSksIDB4MjIyMjIyMjIpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCWdwdV93 cml0ZShncHUsIFJFR19BNFhYX1JCQk1fQ0xPQ0tfQ1RMMl9TUChpKSwgMHgwMDIyMjIyMik7CisJ Zm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJZ3B1X3dyaXRlKGdwdSwgUkVHX0E0WFhfUkJCTV9D TE9DS19IWVNUX1NQKGkpLCAweDAwMDAwMTA0KTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQor CQlncHVfd3JpdGUoZ3B1LCBSRUdfQTRYWF9SQkJNX0NMT0NLX0RFTEFZX1NQKGkpLCAweDAwMDAw MDgxKTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTRYWF9SQkJNX0NMT0NLX0NUTF9VQ0hFLCAweDIy MjIyMjIyKTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTRYWF9SQkJNX0NMT0NLX0NUTDJfVUNIRSwg MHgwMjIyMjIyMik7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E0WFhfUkJCTV9DTE9DS19DVEwzX1VD SEUsIDB4MDAwMDAwMDApOworCWdwdV93cml0ZShncHUsIFJFR19BNFhYX1JCQk1fQ0xPQ0tfQ1RM NF9VQ0hFLCAweDAwMDAwMDAwKTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTRYWF9SQkJNX0NMT0NL X0hZU1RfVUNIRSwgMHgwMDAwNDQ0NCk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E0WFhfUkJCTV9D TE9DS19ERUxBWV9VQ0hFLCAweDAwMDAxMTEyKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQor CQlncHVfd3JpdGUoZ3B1LCBSRUdfQTRYWF9SQkJNX0NMT0NLX0NUTF9SQihpKSwgMHgyMjIyMjIy Mik7CisKKwkvKiBEaXNhYmxlIEwxIGNsb2NraW5nIGluIEE0MjAgZHVlIHRvIENDVSBpc3N1ZXMg d2l0aCBpdCAqLworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJaWYgKGFkcmVub19pc19h NDIwKGFkcmVub19ncHUpKSB7CisJCQlncHVfd3JpdGUoZ3B1LCBSRUdfQTRYWF9SQkJNX0NMT0NL X0NUTDJfUkIoaSksCisJCQkJCTB4MDAwMDIwMjApOworCQl9IGVsc2UgeworCQkJZ3B1X3dyaXRl KGdwdSwgUkVHX0E0WFhfUkJCTV9DTE9DS19DVEwyX1JCKGkpLAorCQkJCQkweDAwMDIyMDIwKTsK KwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJZ3B1X3dyaXRlKGdwdSwg UkVHX0E0WFhfUkJCTV9DTE9DS19DVExfTUFSQl9DQ1UoaSksCisJCQkJMHgwMDAwMDkyMik7CisJ fQorCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlncHVfd3JpdGUoZ3B1LCBSRUdfQTRY WF9SQkJNX0NMT0NLX0hZU1RfUkJfTUFSQl9DQ1UoaSksCisJCQkJMHgwMDAwMDAwMCk7CisJfQor CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlncHVfd3JpdGUoZ3B1LCBSRUdfQTRYWF9S QkJNX0NMT0NLX0RFTEFZX1JCX01BUkJfQ0NVX0wxKGkpLAorCQkJCTB4MDAwMDAwMDEpOworCX0K KworCWdwdV93cml0ZShncHUsIFJFR19BNFhYX1JCQk1fQ0xPQ0tfTU9ERV9HUEMsIDB4MDIyMjIy MjIpOworCWdwdV93cml0ZShncHUsIFJFR19BNFhYX1JCQk1fQ0xPQ0tfSFlTVF9HUEMsIDB4MDQx MDAxMDQpOworCWdwdV93cml0ZShncHUsIFJFR19BNFhYX1JCQk1fQ0xPQ0tfREVMQVlfR1BDLCAw eDAwMDIyMjIyKTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTRYWF9SQkJNX0NMT0NLX0NUTF9DT01f RENPTSwgMHgwMDAwMDAyMik7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E0WFhfUkJCTV9DTE9DS19I WVNUX0NPTV9EQ09NLCAweDAwMDAwMTBGKTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTRYWF9SQkJN X0NMT0NLX0RFTEFZX0NPTV9EQ09NLCAweDAwMDAwMDIyKTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdf QTRYWF9SQkJNX0NMT0NLX0NUTF9UU0VfUkFTX1JCQk0sIDB4MDAyMjIyMjIpOworCWdwdV93cml0 ZShncHUsIFJFR19BNFhYX1JCQk1fQ0xPQ0tfSFlTVF9UU0VfUkFTX1JCQk0sIDB4MDAwMDQxMDQp OworCWdwdV93cml0ZShncHUsIFJFR19BNFhYX1JCQk1fQ0xPQ0tfREVMQVlfVFNFX1JBU19SQkJN LCAweDAwMDAwMjIyKTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTRYWF9SQkJNX0NMT0NLX0NUTF9I TFNRICwgMHgwMDAwMDAwMCk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E0WFhfUkJCTV9DTE9DS19I WVNUX0hMU1EsIDB4MDAwMDAwMDApOworCWdwdV93cml0ZShncHUsIFJFR19BNFhYX1JCQk1fQ0xP Q0tfREVMQVlfSExTUSwgMHgwMDAyMDAwMCk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E0WFhfUkJC TV9DTE9DS19DVEwsIDB4QUFBQUFBQUEpOworCWdwdV93cml0ZShncHUsIFJFR19BNFhYX1JCQk1f Q0xPQ0tfQ1RMMiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGE0eHhfbWVfaW5pdChzdHJ1Y3QgbXNt X2dwdSAqZ3B1KQoreworCXN0cnVjdCBtc21fcmluZ2J1ZmZlciAqcmluZyA9IGdwdS0+cmI7CisK KwlPVVRfUEtUMyhyaW5nLCBDUF9NRV9JTklULCAxNyk7CisJT1VUX1JJTkcocmluZywgMHgwMDAw MDNmNyk7CisJT1VUX1JJTkcocmluZywgMHgwMDAwMDAwMCk7CisJT1VUX1JJTkcocmluZywgMHgw MDAwMDAwMCk7CisJT1VUX1JJTkcocmluZywgMHgwMDAwMDAwMCk7CisJT1VUX1JJTkcocmluZywg MHgwMDAwMDA4MCk7CisJT1VUX1JJTkcocmluZywgMHgwMDAwMDEwMCk7CisJT1VUX1JJTkcocmlu ZywgMHgwMDAwMDE4MCk7CisJT1VUX1JJTkcocmluZywgMHgwMDAwNjYwMCk7CisJT1VUX1JJTkco cmluZywgMHgwMDAwMDE1MCk7CisJT1VUX1JJTkcocmluZywgMHgwMDAwMDE0ZSk7CisJT1VUX1JJ TkcocmluZywgMHgwMDAwMDE1NCk7CisJT1VUX1JJTkcocmluZywgMHgwMDAwMDAwMSk7CisJT1VU X1JJTkcocmluZywgMHgwMDAwMDAwMCk7CisJT1VUX1JJTkcocmluZywgMHgwMDAwMDAwMCk7CisJ T1VUX1JJTkcocmluZywgMHgwMDAwMDAwMCk7CisJT1VUX1JJTkcocmluZywgMHgwMDAwMDAwMCk7 CisJT1VUX1JJTkcocmluZywgMHgwMDAwMDAwMCk7CisKKwlncHUtPmZ1bmNzLT5mbHVzaChncHUp OworCWdwdS0+ZnVuY3MtPmlkbGUoZ3B1KTsKK30KKworc3RhdGljIGludCBhNHh4X2h3X2luaXQo c3RydWN0IG1zbV9ncHUgKmdwdSkKK3sKKwlzdHJ1Y3QgYWRyZW5vX2dwdSAqYWRyZW5vX2dwdSA9 IHRvX2FkcmVub19ncHUoZ3B1KTsKKwlzdHJ1Y3QgYTR4eF9ncHUgKmE0eHhfZ3B1ID0gdG9fYTR4 eF9ncHUoYWRyZW5vX2dwdSk7CisJdWludDMyX3QgKnB0ciwgbGVuOworCWludCBpLCByZXQ7CisK KwlpZiAoYWRyZW5vX2lzX2E0eHgoYWRyZW5vX2dwdSkpIHsKKwkJZ3B1X3dyaXRlKGdwdSwgUkVH X0E0WFhfVkJJRl9BQklUX1NPUlQsIDB4MDAwMTAwMUYpOworCQlncHVfd3JpdGUoZ3B1LCBSRUdf QTRYWF9WQklGX0FCSVRfU09SVF9DT05GLCAweDAwMDAwMEE0KTsKKwkJZ3B1X3dyaXRlKGdwdSwg UkVHX0E0WFhfVkJJRl9HQVRFX09GRl9XUlJFUV9FTiwgMHgwMDAwMDAwMSk7CisJCWdwdV93cml0 ZShncHUsIFJFR19BNFhYX1ZCSUZfSU5fUkRfTElNX0NPTkYwLCAweDE4MTgxODE4KTsKKwkJZ3B1 X3dyaXRlKGdwdSwgUkVHX0E0WFhfVkJJRl9JTl9SRF9MSU1fQ09ORjEsIDB4MDAwMDAwMTgpOwor CQlncHVfd3JpdGUoZ3B1LCBSRUdfQTRYWF9WQklGX0lOX1dSX0xJTV9DT05GMCwgMHgxODE4MTgx OCk7CisJCWdwdV93cml0ZShncHUsIFJFR19BNFhYX1ZCSUZfSU5fV1JfTElNX0NPTkYxLCAweDAw MDAwMDE4KTsKKwkJZ3B1X3dyaXRlKGdwdSwgUkVHX0E0WFhfVkJJRl9ST1VORF9ST0JJTl9RT1Nf QVJCLCAweDAwMDAwMDAzKTsKKwl9IGVsc2UgeworCQlCVUcoKTsKKwl9CisKKwkvKiBNYWtlIGFs bCBibG9ja3MgY29udHJpYnV0ZSB0byB0aGUgR1BVIEJVU1kgcGVyZiBjb3VudGVyICovCisJZ3B1 X3dyaXRlKGdwdSwgUkVHX0E0WFhfUkJCTV9HUFVfQlVTWV9NQVNLRUQsIDB4ZmZmZmZmZmYpOwor CisJLyogVHVuZSB0aGUgaHlzdGVyc2lzIGNvdW50ZXJzIGZvciBTUCBhbmQgQ1AgaWRsZSBkZXRl Y3Rpb24gKi8KKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTRYWF9SQkJNX1NQX0hZU1RfQ05ULCAweDEw KTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTRYWF9SQkJNX1dBSVRfSURMRV9DTE9DS1NfQ1RMLCAw eDEwKTsKKworCSAvKiBFbmFibGUgdGhlIFJCQk0gZXJyb3IgcmVwb3J0aW5nIGJpdHMgKi8KKwln cHVfd3JpdGUoZ3B1LCBSRUdfQTRYWF9SQkJNX0FIQl9DVEwwLCAweDAwMDAwMDAxKTsKKworCS8q IEVuYWJsZSBBSEIgZXJyb3IgcmVwb3J0aW5nKi8KKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTRYWF9S QkJNX0FIQl9DVEwxLCAweGE2ZmZmZmZmKTsKKworCS8qIEVuYWJsZSBwb3dlciBjb3VudGVycyov CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E0WFhfUkJCTV9SQkJNX0NUTCwgMHgwMDAwMDAzMCk7CisK KwkvKgorCSAqIFR1cm4gb24gaGFuZyBkZXRlY3Rpb24gLSB0aGlzIHNwZXdzIGEgbG90IG9mIHVz ZWZ1bCBpbmZvcm1hdGlvbgorCSAqIGludG8gdGhlIFJCQk0gcmVnaXN0ZXJzIG9uIGEgaGFuZzoK KwkgKi8KKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTRYWF9SQkJNX0lOVEVSRkFDRV9IQU5HX0lOVF9D VEwsCisJCQkoMSA8PCAzMCkgfCAweEZGRkYpOworCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E0WFhf UkJfR01FTV9CQVNFX0FERFIsCisJCQkodW5zaWduZWQgaW50KShhNHh4X2dwdS0+b2NtZW1fYmFz ZSA+PiAxNCkpOworCisJLyogVHVybiBvbiBwZXJmb3JtYW5jZSBjb3VudGVyczogKi8KKwlncHVf d3JpdGUoZ3B1LCBSRUdfQTRYWF9SQkJNX1BFUkZDVFJfQ1RMLCAweDAxKTsKKworCS8qIERpc2Fi bGUgTDIgYnlwYXNzIHRvIGF2b2lkIFVDSEUgb3V0IG9mIGJvdW5kcyBlcnJvcnMgKi8KKwlncHVf d3JpdGUoZ3B1LCBSRUdfQTRYWF9VQ0hFX1RSQVBfQkFTRV9MTywgMHhmZmZmMDAwMCk7CisJZ3B1 X3dyaXRlKGdwdSwgUkVHX0E0WFhfVUNIRV9UUkFQX0JBU0VfSEksIDB4ZmZmZjAwMDApOworCisJ Z3B1X3dyaXRlKGdwdSwgUkVHX0E0WFhfQ1BfREVCVUcsICgxIDw8IDI1KSB8CisJCQkoYWRyZW5v X2lzX2E0MjAoYWRyZW5vX2dwdSkgPyAoMSA8PCAyOSkgOiAwKSk7CisKKwlhNHh4X2VuYWJsZV9o d2NnKGdwdSk7CisKKwkvKgorCSAqIEZvciBBNDIwIHNldCBSQkJNX0NMT0NLX0RFTEFZX0hMU1Eu Q0dDX0hMU1FfVFBfRUFSTFlfQ1lDID49IDIKKwkgKiBkdWUgdG8gdGltaW5nIGlzc3VlIHdpdGgg SExTUV9UUF9DTEtfRU4KKwkgKi8KKwlpZiAoYWRyZW5vX2lzX2E0MjAoYWRyZW5vX2dwdSkpIHsK KwkJdW5zaWduZWQgaW50IHZhbDsKKwkJdmFsID0gZ3B1X3JlYWQoZ3B1LCBSRUdfQTRYWF9SQkJN X0NMT0NLX0RFTEFZX0hMU1EpOworCQl2YWwgJj0gfkE0WFhfQ0dDX0hMU1FfRUFSTFlfQ1lDX19N QVNLOworCQl2YWwgfD0gMiA8PCBBNFhYX0NHQ19ITFNRX0VBUkxZX0NZQ19fU0hJRlQ7CisJCWdw dV93cml0ZShncHUsIFJFR19BNFhYX1JCQk1fQ0xPQ0tfREVMQVlfSExTUSwgdmFsKTsKKwl9CisK KwlyZXQgPSBhZHJlbm9faHdfaW5pdChncHUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisK KwkvKiBzZXR1cCBhY2Nlc3MgcHJvdGVjdGlvbjogKi8KKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTRY WF9DUF9QUk9URUNUX0NUUkwsIDB4MDAwMDAwMDcpOworCisJLyogUkJCTSByZWdpc3RlcnMgKi8K KwlncHVfd3JpdGUoZ3B1LCBSRUdfQTRYWF9DUF9QUk9URUNUKDApLCAweDYyMDAwMDEwKTsKKwln cHVfd3JpdGUoZ3B1LCBSRUdfQTRYWF9DUF9QUk9URUNUKDEpLCAweDYzMDAwMDIwKTsKKwlncHVf d3JpdGUoZ3B1LCBSRUdfQTRYWF9DUF9QUk9URUNUKDIpLCAweDY0MDAwMDQwKTsKKwlncHVfd3Jp dGUoZ3B1LCBSRUdfQTRYWF9DUF9QUk9URUNUKDMpLCAweDY1MDAwMDgwKTsKKwlncHVfd3JpdGUo Z3B1LCBSRUdfQTRYWF9DUF9QUk9URUNUKDQpLCAweDY2MDAwMTAwKTsKKwlncHVfd3JpdGUoZ3B1 LCBSRUdfQTRYWF9DUF9QUk9URUNUKDUpLCAweDY0MDAwMjAwKTsKKworCS8qIENQIHJlZ2lzdGVy cyAqLworCWdwdV93cml0ZShncHUsIFJFR19BNFhYX0NQX1BST1RFQ1QoNiksIDB4NjcwMDA4MDAp OworCWdwdV93cml0ZShncHUsIFJFR19BNFhYX0NQX1BST1RFQ1QoNyksIDB4NjQwMDE2MDApOwor CisKKwkvKiBSQiByZWdpc3RlcnMgKi8KKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTRYWF9DUF9QUk9U RUNUKDgpLCAweDYwMDAzMzAwKTsKKworCS8qIEhMU1EgcmVnaXN0ZXJzICovCisJZ3B1X3dyaXRl KGdwdSwgUkVHX0E0WFhfQ1BfUFJPVEVDVCg5KSwgMHg2MDAwMzgwMCk7CisKKwkvKiBWUEMgcmVn aXN0ZXJzICovCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E0WFhfQ1BfUFJPVEVDVCgxMCksIDB4NjEw MDM5ODApOworCisJLyogU01NVSByZWdpc3RlcnMgKi8KKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTRY WF9DUF9QUk9URUNUKDExKSwgMHg2ZTAxMDAwMCk7CisKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTRY WF9SQkJNX0lOVF8wX01BU0ssIEE0WFhfSU5UMF9NQVNLKTsKKworCXJldCA9IGFkcmVub19od19p bml0KGdwdSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIExvYWQgUE00OiAqLwor CXB0ciA9ICh1aW50MzJfdCAqKShhZHJlbm9fZ3B1LT5wbTQtPmRhdGEpOworCWxlbiA9IGFkcmVu b19ncHUtPnBtNC0+c2l6ZSAvIDQ7CisJREJHKCJsb2FkaW5nIFBNNCB1Y29kZSB2ZXJzaW9uOiAl dSIsIHB0clswXSk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E0WFhfQ1BfTUVfUkFNX1dBRERSLCAw KTsKKwlmb3IgKGkgPSAxOyBpIDwgbGVuOyBpKyspCisJCWdwdV93cml0ZShncHUsIFJFR19BNFhY X0NQX01FX1JBTV9EQVRBLCBwdHJbaV0pOworCisJLyogTG9hZCBQRlA6ICovCisJcHRyID0gKHVp bnQzMl90ICopKGFkcmVub19ncHUtPnBmcC0+ZGF0YSk7CisJbGVuID0gYWRyZW5vX2dwdS0+cGZw LT5zaXplIC8gNDsKKwlEQkcoImxvYWRpbmcgUEZQIHVjb2RlIHZlcnNpb246ICV1IiwgcHRyWzBd KTsKKworCWdwdV93cml0ZShncHUsIFJFR19BNFhYX0NQX1BGUF9VQ09ERV9BRERSLCAwKTsKKwlm b3IgKGkgPSAxOyBpIDwgbGVuOyBpKyspCisJCWdwdV93cml0ZShncHUsIFJFR19BNFhYX0NQX1BG UF9VQ09ERV9EQVRBLCBwdHJbaV0pOworCisJLyogY2xlYXIgTUVfSEFMVCB0byBzdGFydCBtaWNy byBlbmdpbmUgKi8KKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTRYWF9DUF9NRV9DTlRMLCAwKTsKKwor CWE0eHhfbWVfaW5pdChncHUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhNHh4X3Jl Y292ZXIoc3RydWN0IG1zbV9ncHUgKmdwdSkKK3sKKwkvKiBkdW1wIHJlZ2lzdGVycyBiZWZvcmUg cmVzZXR0aW5nIGdwdSwgaWYgZW5hYmxlZDogKi8KKwlpZiAoaGFuZ19kZWJ1ZykKKwkJYTR4eF9k dW1wKGdwdSk7CisKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTRYWF9SQkJNX1NXX1JFU0VUX0NNRCwg MSk7CisJZ3B1X3JlYWQoZ3B1LCBSRUdfQTRYWF9SQkJNX1NXX1JFU0VUX0NNRCk7CisJZ3B1X3dy aXRlKGdwdSwgUkVHX0E0WFhfUkJCTV9TV19SRVNFVF9DTUQsIDApOworCWFkcmVub19yZWNvdmVy KGdwdSk7Cit9CisKK3N0YXRpYyB2b2lkIGE0eHhfZGVzdHJveShzdHJ1Y3QgbXNtX2dwdSAqZ3B1 KQoreworCXN0cnVjdCBhZHJlbm9fZ3B1ICphZHJlbm9fZ3B1ID0gdG9fYWRyZW5vX2dwdShncHUp OworCXN0cnVjdCBhNHh4X2dwdSAqYTR4eF9ncHUgPSB0b19hNHh4X2dwdShhZHJlbm9fZ3B1KTsK KworCURCRygiJXMiLCBncHUtPm5hbWUpOworCisJYWRyZW5vX2dwdV9jbGVhbnVwKGFkcmVub19n cHUpOworCisjaWZkZWYgQ09ORklHX01TTV9PQ01FTQorCWlmIChhNHh4X2dwdS0+b2NtZW1fYmFz ZSkKKwkJb2NtZW1fZnJlZShPQ01FTV9HUkFQSElDUywgYTR4eF9ncHUtPm9jbWVtX2hkbCk7Cisj ZW5kaWYKKworCWtmcmVlKGE0eHhfZ3B1KTsKK30KKworc3RhdGljIHZvaWQgYTR4eF9pZGxlKHN0 cnVjdCBtc21fZ3B1ICpncHUpCit7CisJLyogd2FpdCBmb3IgcmluZ2J1ZmZlciB0byBkcmFpbjog Ki8KKwlhZHJlbm9faWRsZShncHUpOworCisJLyogdGhlbiB3YWl0IGZvciBHUFUgdG8gZmluaXNo OiAqLworCWlmIChzcGluX3VudGlsKCEoZ3B1X3JlYWQoZ3B1LCBSRUdfQTRYWF9SQkJNX1NUQVRV UykgJgorCQkJCQlBNFhYX1JCQk1fU1RBVFVTX0dQVV9CVVNZKSkpCisJCURSTV9FUlJPUigiJXM6 IHRpbWVvdXQgd2FpdGluZyBmb3IgR1BVIHRvIGlkbGUhXG4iLCBncHUtPm5hbWUpOworCisJLyog VE9ETyBtYXliZSB3ZSBuZWVkIHRvIHJlc2V0IEdQVSBoZXJlIHRvIHJlY292ZXIgZnJvbSBoYW5n PyAqLworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYTR4eF9pcnEoc3RydWN0IG1zbV9ncHUgKmdw dSkKK3sKKwl1aW50MzJfdCBzdGF0dXM7CisKKwlzdGF0dXMgPSBncHVfcmVhZChncHUsIFJFR19B NFhYX1JCQk1fSU5UXzBfU1RBVFVTKTsKKwlEQkcoIiVzOiBJbnQgc3RhdHVzICUwOHgiLCBncHUt Pm5hbWUsIHN0YXR1cyk7CisKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTRYWF9SQkJNX0lOVF9DTEVB Ul9DTUQsIHN0YXR1cyk7CisKKwltc21fZ3B1X3JldGlyZShncHUpOworCisJcmV0dXJuIElSUV9I QU5ETEVEOworfQorY29uc3QgdW5zaWduZWQgaW50IGE0eHhfcmVnaXN0ZXJzW10gPSB7CisJLyog UkJCTSAqLworCTB4MDAwMCwgMHgwMDAyLCAweDAwMDQsIDB4MDAyMSwgMHgwMDIzLCAweDAwMjQs IDB4MDAyNiwgMHgwMDI2LAorCTB4MDAyOCwgMHgwMDJCLCAweDAwMkUsIDB4MDAzNCwgMHgwMDM3 LCAweDAwNDQsIDB4MDA0NywgMHgwMDY2LAorCTB4MDA2OCwgMHgwMDk1LCAweDAwOUMsIDB4MDE3 MCwgMHgwMTc0LCAweDAxQUYsCisJLyogQ1AgKi8KKwkweDAyMDAsIDB4MDIzMywgMHgwMjQwLCAw eDAyNTAsIDB4MDRDMCwgMHgwNERELCAweDA1MDAsIDB4MDUwQiwKKwkweDA1NzgsIDB4MDU4RiwK KwkvKiBWU0MgKi8KKwkweDBDMDAsIDB4MEMwMywgMHgwQzA4LCAweDBDNDEsIDB4MEM1MCwgMHgw QzUxLAorCS8qIEdSQVMgKi8KKwkweDBDODAsIDB4MEM4MSwgMHgwQzg4LCAweDBDOEYsCisJLyog UkIgKi8KKwkweDBDQzAsIDB4MENDMCwgMHgwQ0M0LCAweDBDRDIsCisJLyogUEMgKi8KKwkweDBE MDAsIDB4MEQwQywgMHgwRDEwLCAweDBEMTcsIDB4MEQyMCwgMHgwRDIzLAorCS8qIFZGRCAqLwor CTB4MEU0MCwgMHgwRTRBLAorCS8qIFZQQyAqLworCTB4MEU2MCwgMHgwRTYxLCAweDBFNjMsIDB4 MEU2OCwKKwkvKiBVQ0hFICovCisJMHgwRTgwLCAweDBFODQsIDB4MEU4OCwgMHgwRTk1LAorCS8q IFZNSURNVCAqLworCTB4MTAwMCwgMHgxMDAwLCAweDEwMDIsIDB4MTAwMiwgMHgxMDA0LCAweDEw MDQsIDB4MTAwOCwgMHgxMDBBLAorCTB4MTAwQywgMHgxMDBELCAweDEwMEYsIDB4MTAxMCwgMHgx MDEyLCAweDEwMTYsIDB4MTAyNCwgMHgxMDI0LAorCTB4MTAyNywgMHgxMDI3LCAweDExMDAsIDB4 MTEwMCwgMHgxMTAyLCAweDExMDIsIDB4MTEwNCwgMHgxMTA0LAorCTB4MTExMCwgMHgxMTEwLCAw eDExMTIsIDB4MTExNiwgMHgxMTI0LCAweDExMjQsIDB4MTMwMCwgMHgxMzAwLAorCTB4MTM4MCwg MHgxMzgwLAorCS8qIEdSQVMgQ1RYIDAgKi8KKwkweDIwMDAsIDB4MjAwNCwgMHgyMDA4LCAweDIw NjcsIDB4MjA3MCwgMHgyMDc4LCAweDIwN0IsIDB4MjE2RSwKKwkvKiBQQyBDVFggMCAqLworCTB4 MjFDMCwgMHgyMUM2LCAweDIxRDAsIDB4MjFEMCwgMHgyMUQ5LCAweDIxRDksIDB4MjFFNSwgMHgy MUU3LAorCS8qIFZGRCBDVFggMCAqLworCTB4MjIwMCwgMHgyMjA0LCAweDIyMDgsIDB4MjJBOSwK KwkvKiBHUkFTIENUWCAxICovCisJMHgyNDAwLCAweDI0MDQsIDB4MjQwOCwgMHgyNDY3LCAweDI0 NzAsIDB4MjQ3OCwgMHgyNDdCLCAweDI1NkUsCisJLyogUEMgQ1RYIDEgKi8KKwkweDI1QzAsIDB4 MjVDNiwgMHgyNUQwLCAweDI1RDAsIDB4MjVEOSwgMHgyNUQ5LCAweDI1RTUsIDB4MjVFNywKKwkv KiBWRkQgQ1RYIDEgKi8KKwkweDI2MDAsIDB4MjYwNCwgMHgyNjA4LCAweDI2QTksCisJLyogWFBV ICovCisJMHgyQzAwLCAweDJDMDEsIDB4MkMxMCwgMHgyQzEwLCAweDJDMTIsIDB4MkMxNiwgMHgy QzFELCAweDJDMjAsCisJMHgyQzI4LCAweDJDMjgsIDB4MkMzMCwgMHgyQzMwLCAweDJDMzIsIDB4 MkMzNiwgMHgyQzQwLCAweDJDNDAsCisJMHgyQzUwLCAweDJDNTAsIDB4MkM1MiwgMHgyQzU2LCAw eDJDODAsIDB4MkM4MCwgMHgyQzk0LCAweDJDOTUsCisJLyogVkJJRiAqLworCTB4MzAwMCwgMHgz MDA3LCAweDMwMEMsIDB4MzAxNCwgMHgzMDE4LCAweDMwMUQsIDB4MzAyMCwgMHgzMDIyLAorCTB4 MzAyNCwgMHgzMDI2LCAweDMwMjgsIDB4MzAyQSwgMHgzMDJDLCAweDMwMkQsIDB4MzAzMCwgMHgz MDMxLAorCTB4MzAzNCwgMHgzMDM2LCAweDMwMzgsIDB4MzAzOCwgMHgzMDNDLCAweDMwM0QsIDB4 MzA0MCwgMHgzMDQwLAorCTB4MzA0OSwgMHgzMDQ5LCAweDMwNTgsIDB4MzA1OCwgMHgzMDVCLCAw eDMwNjEsIDB4MzA2NCwgMHgzMDY4LAorCTB4MzA2QywgMHgzMDZELCAweDMwODAsIDB4MzA4OCwg MHgzMDhCLCAweDMwOEMsIDB4MzA5MCwgMHgzMDk0LAorCTB4MzA5OCwgMHgzMDk4LCAweDMwOUMs IDB4MzA5QywgMHgzMEMwLCAweDMwQzAsIDB4MzBDOCwgMHgzMEM4LAorCTB4MzBEMCwgMHgzMEQw LCAweDMwRDgsIDB4MzBEOCwgMHgzMEUwLCAweDMwRTAsIDB4MzEwMCwgMHgzMTAwLAorCTB4MzEw OCwgMHgzMTA4LCAweDMxMTAsIDB4MzExMCwgMHgzMTE4LCAweDMxMTgsIDB4MzEyMCwgMHgzMTIw LAorCTB4MzEyNCwgMHgzMTI1LCAweDMxMjksIDB4MzEyOSwgMHgzMTMxLCAweDMxMzEsIDB4MzMw QywgMHgzMzBDLAorCTB4MzMxMCwgMHgzMzEwLCAweDM0MDAsIDB4MzQwMSwgMHgzNDEwLCAweDM0 MTAsIDB4MzQxMiwgMHgzNDE2LAorCTB4MzQxRCwgMHgzNDIwLCAweDM0MjgsIDB4MzQyOCwgMHgz NDMwLCAweDM0MzAsIDB4MzQzMiwgMHgzNDM2LAorCTB4MzQ0MCwgMHgzNDQwLCAweDM0NTAsIDB4 MzQ1MCwgMHgzNDUyLCAweDM0NTYsIDB4MzQ4MCwgMHgzNDgwLAorCTB4MzQ5NCwgMHgzNDk1LCAw eDQwMDAsIDB4NDAwMCwgMHg0MDAyLCAweDQwMDIsIDB4NDAwNCwgMHg0MDA0LAorCTB4NDAwOCwg MHg0MDBBLCAweDQwMEMsIDB4NDAwRCwgMHg0MDBGLCAweDQwMTIsIDB4NDAxNCwgMHg0MDE2LAor CTB4NDAxRCwgMHg0MDFELCAweDQwMjAsIDB4NDAyNywgMHg0MDYwLCAweDQwNjIsIDB4NDIwMCwg MHg0MjAwLAorCTB4NDMwMCwgMHg0MzAwLCAweDQ0MDAsIDB4NDQwMCwgMHg0NTAwLCAweDQ1MDAs IDB4NDgwMCwgMHg0ODAyLAorCTB4NDgwRiwgMHg0ODBGLCAweDQ4MTEsIDB4NDgxMSwgMHg0ODEz LCAweDQ4MTMsIDB4NDgxNSwgMHg0ODE2LAorCTB4NDgyQiwgMHg0ODJCLCAweDQ4NTcsIDB4NDg1 NywgMHg0ODgzLCAweDQ4ODMsIDB4NDhBRiwgMHg0OEFGLAorCTB4NDhDNSwgMHg0OEM1LCAweDQ4 RTUsIDB4NDhFNSwgMHg0OTA1LCAweDQ5MDUsIDB4NDkyNSwgMHg0OTI1LAorCTB4NDk0NSwgMHg0 OTQ1LCAweDQ5NTAsIDB4NDk1MCwgMHg0OTVCLCAweDQ5NUIsIDB4NDk4MCwgMHg0OThFLAorCTB4 NEIwMCwgMHg0QjAwLCAweDRDMDAsIDB4NEMwMCwgMHg0RDAwLCAweDREMDAsIDB4NEUwMCwgMHg0 RTAwLAorCTB4NEU4MCwgMHg0RTgwLCAweDRGMDAsIDB4NEYwMCwgMHg0RjA4LCAweDRGMDgsIDB4 NEYxMCwgMHg0RjEwLAorCTB4NEYxOCwgMHg0RjE4LCAweDRGMjAsIDB4NEYyMCwgMHg0RjMwLCAw eDRGMzAsIDB4NEY2MCwgMHg0RjYwLAorCTB4NEY4MCwgMHg0RjgxLCAweDRGODgsIDB4NEY4OSwg MHg0RkVFLCAweDRGRUUsIDB4NEZGMywgMHg0RkYzLAorCTB4NjAwMCwgMHg2MDAxLCAweDYwMDgs IDB4NjAwRiwgMHg2MDE0LCAweDYwMTYsIDB4NjAxOCwgMHg2MDFCLAorCTB4NjFGRCwgMHg2MUZE LCAweDYyM0MsIDB4NjIzQywgMHg2MzgwLCAweDYzODAsIDB4NjNBMCwgMHg2M0EwLAorCTB4NjND MCwgMHg2M0MxLCAweDYzQzgsIDB4NjNDOSwgMHg2M0QwLCAweDYzRDQsIDB4NjNENiwgMHg2M0Q2 LAorCTB4NjNFRSwgMHg2M0VFLCAweDY0MDAsIDB4NjQwMSwgMHg2NDA4LCAweDY0MEYsIDB4NjQx NCwgMHg2NDE2LAorCTB4NjQxOCwgMHg2NDFCLCAweDY1RkQsIDB4NjVGRCwgMHg2NjNDLCAweDY2 M0MsIDB4Njc4MCwgMHg2NzgwLAorCTB4NjdBMCwgMHg2N0EwLCAweDY3QzAsIDB4NjdDMSwgMHg2 N0M4LCAweDY3QzksIDB4NjdEMCwgMHg2N0Q0LAorCTB4NjdENiwgMHg2N0Q2LCAweDY3RUUsIDB4 NjdFRSwgMHg2ODAwLCAweDY4MDEsIDB4NjgwOCwgMHg2ODBGLAorCTB4NjgxNCwgMHg2ODE2LCAw eDY4MTgsIDB4NjgxQiwgMHg2OUZELCAweDY5RkQsIDB4NkEzQywgMHg2QTNDLAorCTB4NkI4MCwg MHg2QjgwLCAweDZCQTAsIDB4NkJBMCwgMHg2QkMwLCAweDZCQzEsIDB4NkJDOCwgMHg2QkM5LAor CTB4NkJEMCwgMHg2QkQ0LCAweDZCRDYsIDB4NkJENiwgMHg2QkVFLCAweDZCRUUsCisJfjAgICAv KiBzZW50aW5lbCAqLworfTsKKworI2lmZGVmIENPTkZJR19ERUJVR19GUworc3RhdGljIHZvaWQg YTR4eF9zaG93KHN0cnVjdCBtc21fZ3B1ICpncHUsIHN0cnVjdCBzZXFfZmlsZSAqbSkKK3sKKwlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZ3B1LT5kZXY7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0 cnVjdF9tdXRleCk7CisKKwlncHUtPmZ1bmNzLT5wbV9yZXN1bWUoZ3B1KTsKKworCXNlcV9wcmlu dGYobSwgInN0YXR1czogICAlMDh4XG4iLAorCQkJZ3B1X3JlYWQoZ3B1LCBSRUdfQTRYWF9SQkJN X1NUQVRVUykpOworCWdwdS0+ZnVuY3MtPnBtX3N1c3BlbmQoZ3B1KTsKKworCWFkcmVub19zaG93 KGdwdSwgbSk7CisKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKK30KKyNlbmRp ZgorCisvKiBSZWdpc3RlciBvZmZzZXQgZGVmaW5lcyBmb3IgQTRYWCwgaW4gb3JkZXIgb2YgZW51 bSBhZHJlbm9fcmVncyAqLworc3RhdGljIHVuc2lnbmVkIGludCBhNHh4X3JlZ2lzdGVyX29mZnNl dHNbUkVHX0FEUkVOT19SRUdJU1RFUl9NQVhdID0geworCVJFR19BRFJFTk9fREVGSU5FKFJFR19B RFJFTk9fQ1BfREVCVUcsIFJFR19BNFhYX0NQX0RFQlVHKSwKKwlSRUdfQURSRU5PX0RFRklORShS RUdfQURSRU5PX0NQX01FX1JBTV9XQUREUiwgUkVHX0E0WFhfQ1BfTUVfUkFNX1dBRERSKSwKKwlS RUdfQURSRU5PX0RFRklORShSRUdfQURSRU5PX0NQX01FX1JBTV9EQVRBLCBSRUdfQTRYWF9DUF9N RV9SQU1fREFUQSksCisJUkVHX0FEUkVOT19ERUZJTkUoUkVHX0FEUkVOT19DUF9QRlBfVUNPREVf REFUQSwKKwkJCVJFR19BNFhYX0NQX1BGUF9VQ09ERV9EQVRBKSwKKwlSRUdfQURSRU5PX0RFRklO RShSRUdfQURSRU5PX0NQX1BGUF9VQ09ERV9BRERSLAorCQkJUkVHX0E0WFhfQ1BfUEZQX1VDT0RF X0FERFIpLAorCVJFR19BRFJFTk9fREVGSU5FKFJFR19BRFJFTk9fQ1BfV0ZJX1BFTkRfQ1RSLCBS RUdfQTRYWF9DUF9XRklfUEVORF9DVFIpLAorCVJFR19BRFJFTk9fREVGSU5FKFJFR19BRFJFTk9f Q1BfUkJfQkFTRSwgUkVHX0E0WFhfQ1BfUkJfQkFTRSksCisJUkVHX0FEUkVOT19ERUZJTkUoUkVH X0FEUkVOT19DUF9SQl9SUFRSX0FERFIsIFJFR19BNFhYX0NQX1JCX1JQVFJfQUREUiksCisJUkVH X0FEUkVOT19ERUZJTkUoUkVHX0FEUkVOT19DUF9SQl9SUFRSLCBSRUdfQTRYWF9DUF9SQl9SUFRS KSwKKwlSRUdfQURSRU5PX0RFRklORShSRUdfQURSRU5PX0NQX1JCX1dQVFIsIFJFR19BNFhYX0NQ X1JCX1dQVFIpLAorCVJFR19BRFJFTk9fREVGSU5FKFJFR19BRFJFTk9fQ1BfUFJPVEVDVF9DVFJM LCBSRUdfQTRYWF9DUF9QUk9URUNUX0NUUkwpLAorCVJFR19BRFJFTk9fREVGSU5FKFJFR19BRFJF Tk9fQ1BfTUVfQ05UTCwgUkVHX0E0WFhfQ1BfTUVfQ05UTCksCisJUkVHX0FEUkVOT19ERUZJTkUo UkVHX0FEUkVOT19DUF9SQl9DTlRMLCBSRUdfQTRYWF9DUF9SQl9DTlRMKSwKKwlSRUdfQURSRU5P X0RFRklORShSRUdfQURSRU5PX0NQX0lCMV9CQVNFLCBSRUdfQTRYWF9DUF9JQjFfQkFTRSksCisJ UkVHX0FEUkVOT19ERUZJTkUoUkVHX0FEUkVOT19DUF9JQjFfQlVGU1osIFJFR19BNFhYX0NQX0lC MV9CVUZTWiksCisJUkVHX0FEUkVOT19ERUZJTkUoUkVHX0FEUkVOT19DUF9JQjJfQkFTRSwgUkVH X0E0WFhfQ1BfSUIyX0JBU0UpLAorCVJFR19BRFJFTk9fREVGSU5FKFJFR19BRFJFTk9fQ1BfSUIy X0JVRlNaLCBSRUdfQTRYWF9DUF9JQjJfQlVGU1opLAorCVJFR19BRFJFTk9fREVGSU5FKFJFR19B RFJFTk9fQ1BfVElNRVNUQU1QLCBSRUdfQTRYWF9DUF9TQ1JBVENIXzApLAorCVJFR19BRFJFTk9f REVGSU5FKFJFR19BRFJFTk9fQ1BfTUVfUkFNX1JBRERSLCBSRUdfQTRYWF9DUF9NRV9SQU1fUkFE RFIpLAorCVJFR19BRFJFTk9fREVGSU5FKFJFR19BRFJFTk9fQ1BfUk9RX0FERFIsIFJFR19BNFhY X0NQX1JPUV9BRERSKSwKKwlSRUdfQURSRU5PX0RFRklORShSRUdfQURSRU5PX0NQX1JPUV9EQVRB LCBSRUdfQTRYWF9DUF9ST1FfREFUQSksCisJUkVHX0FEUkVOT19ERUZJTkUoUkVHX0FEUkVOT19D UF9NRVJDSVVfQUREUiwgUkVHX0E0WFhfQ1BfTUVSQ0lVX0FERFIpLAorCVJFR19BRFJFTk9fREVG SU5FKFJFR19BRFJFTk9fQ1BfTUVSQ0lVX0RBVEEsIFJFR19BNFhYX0NQX01FUkNJVV9EQVRBKSwK KwlSRUdfQURSRU5PX0RFRklORShSRUdfQURSRU5PX0NQX01FUkNJVV9EQVRBMiwgUkVHX0E0WFhf Q1BfTUVSQ0lVX0RBVEEyKSwKKwlSRUdfQURSRU5PX0RFRklORShSRUdfQURSRU5PX0NQX01FUV9B RERSLCBSRUdfQTRYWF9DUF9NRVFfQUREUiksCisJUkVHX0FEUkVOT19ERUZJTkUoUkVHX0FEUkVO T19DUF9NRVFfREFUQSwgUkVHX0E0WFhfQ1BfTUVRX0RBVEEpLAorCVJFR19BRFJFTk9fREVGSU5F KFJFR19BRFJFTk9fQ1BfSFdfRkFVTFQsIFJFR19BNFhYX0NQX0hXX0ZBVUxUKSwKKwlSRUdfQURS RU5PX0RFRklORShSRUdfQURSRU5PX0NQX1BST1RFQ1RfU1RBVFVTLAorCQkJUkVHX0E0WFhfQ1Bf UFJPVEVDVF9TVEFUVVMpLAorCVJFR19BRFJFTk9fREVGSU5FKFJFR19BRFJFTk9fU0NSQVRDSF9B RERSLCBSRUdfQTRYWF9DUF9TQ1JBVENIX0FERFIpLAorCVJFR19BRFJFTk9fREVGSU5FKFJFR19B RFJFTk9fU0NSQVRDSF9VTVNLLCBSRUdfQTRYWF9DUF9TQ1JBVENIX1VNQVNLKSwKKwlSRUdfQURS RU5PX0RFRklORShSRUdfQURSRU5PX1JCQk1fU1RBVFVTLCBSRUdfQTRYWF9SQkJNX1NUQVRVUyks CisJUkVHX0FEUkVOT19ERUZJTkUoUkVHX0FEUkVOT19SQkJNX1BFUkZDVFJfQ1RMLAorCQkJUkVH X0E0WFhfUkJCTV9QRVJGQ1RSX0NUTCksCisJUkVHX0FEUkVOT19ERUZJTkUoUkVHX0FEUkVOT19S QkJNX1BFUkZDVFJfTE9BRF9DTUQwLAorCQkJUkVHX0E0WFhfUkJCTV9QRVJGQ1RSX0xPQURfQ01E MCksCisJUkVHX0FEUkVOT19ERUZJTkUoUkVHX0FEUkVOT19SQkJNX1BFUkZDVFJfTE9BRF9DTUQx LAorCQkJUkVHX0E0WFhfUkJCTV9QRVJGQ1RSX0xPQURfQ01EMSksCisJUkVHX0FEUkVOT19ERUZJ TkUoUkVHX0FEUkVOT19SQkJNX1BFUkZDVFJfTE9BRF9DTUQyLAorCQkJUkVHX0E0WFhfUkJCTV9Q RVJGQ1RSX0xPQURfQ01EMiksCisJUkVHX0FEUkVOT19ERUZJTkUoUkVHX0FEUkVOT19SQkJNX1BF UkZDVFJfUFdSXzFfTE8sCisJCQlSRUdfQTRYWF9SQkJNX1BFUkZDVFJfUFdSXzFfTE8pLAorCVJF R19BRFJFTk9fREVGSU5FKFJFR19BRFJFTk9fUkJCTV9JTlRfMF9NQVNLLCBSRUdfQTRYWF9SQkJN X0lOVF8wX01BU0spLAorCVJFR19BRFJFTk9fREVGSU5FKFJFR19BRFJFTk9fUkJCTV9JTlRfMF9T VEFUVVMsCisJCQlSRUdfQTRYWF9SQkJNX0lOVF8wX1NUQVRVUyksCisJUkVHX0FEUkVOT19ERUZJ TkUoUkVHX0FEUkVOT19SQkJNX0FIQl9FUlJPUl9TVEFUVVMsCisJCQlSRUdfQTRYWF9SQkJNX0FI Ql9FUlJPUl9TVEFUVVMpLAorCVJFR19BRFJFTk9fREVGSU5FKFJFR19BRFJFTk9fUkJCTV9BSEJf Q01ELCBSRUdfQTRYWF9SQkJNX0FIQl9DTUQpLAorCVJFR19BRFJFTk9fREVGSU5FKFJFR19BRFJF Tk9fUkJCTV9DTE9DS19DVEwsIFJFR19BNFhYX1JCQk1fQ0xPQ0tfQ1RMKSwKKwlSRUdfQURSRU5P X0RFRklORShSRUdfQURSRU5PX1JCQk1fQUhCX01FX1NQTElUX1NUQVRVUywKKwkJCVJFR19BNFhY X1JCQk1fQUhCX01FX1NQTElUX1NUQVRVUyksCisJUkVHX0FEUkVOT19ERUZJTkUoUkVHX0FEUkVO T19SQkJNX0FIQl9QRlBfU1BMSVRfU1RBVFVTLAorCQkJUkVHX0E0WFhfUkJCTV9BSEJfUEZQX1NQ TElUX1NUQVRVUyksCisJUkVHX0FEUkVOT19ERUZJTkUoUkVHX0FEUkVOT19WUENfREVCVUdfUkFN X1NFTCwKKwkJCVJFR19BNFhYX1ZQQ19ERUJVR19SQU1fU0VMKSwKKwlSRUdfQURSRU5PX0RFRklO RShSRUdfQURSRU5PX1ZQQ19ERUJVR19SQU1fUkVBRCwKKwkJCVJFR19BNFhYX1ZQQ19ERUJVR19S QU1fUkVBRCksCisJUkVHX0FEUkVOT19ERUZJTkUoUkVHX0FEUkVOT19SQkJNX0lOVF9DTEVBUl9D TUQsCisJCQlSRUdfQTRYWF9SQkJNX0lOVF9DTEVBUl9DTUQpLAorCVJFR19BRFJFTk9fREVGSU5F KFJFR19BRFJFTk9fVlNDX1BJUEVfREFUQV9BRERSRVNTXzAsCisJCQlSRUdfQTRYWF9WU0NfUElQ RV9EQVRBX0FERFJFU1NfMCksCisJUkVHX0FEUkVOT19ERUZJTkUoUkVHX0FEUkVOT19WU0NfUElQ RV9EQVRBX0xFTkdUSF83LAorCQkJUkVHX0E0WFhfVlNDX1BJUEVfREFUQV9MRU5HVEhfMCArIDcp LAorCVJFR19BRFJFTk9fREVGSU5FKFJFR19BRFJFTk9fVlNDX1NJWkVfQUREUkVTUywKKwkJCVJF R19BNFhYX1ZTQ19TSVpFX0FERFJFU1MpLAorCVJFR19BRFJFTk9fREVGSU5FKFJFR19BRFJFTk9f VkZEX0NPTlRST0xfMCwgUkVHX0E0WFhfVkZEX0NPTlRST0xfMCksCisJUkVHX0FEUkVOT19ERUZJ TkUoUkVHX0FEUkVOT19WRkRfRkVUQ0hfSU5TVFJfMF8wLAorCQkJUkVHX0E0WFhfVkZEX0ZFVENI X0lOU1RSXzBfMCksCisJUkVHX0FEUkVOT19ERUZJTkUoUkVHX0FEUkVOT19WRkRfRkVUQ0hfSU5T VFJfMV9GLAorCQkJUkVHX0E0WFhfVkZEX0ZFVENIX0lOU1RSXzFfMCArIDB4NCozMSksCisJUkVH X0FEUkVOT19ERUZJTkUoUkVHX0FEUkVOT19TUF9WU19QVlRfTUVNX0FERFJfUkVHLAorCQkJUkVH X0E0WFhfU1BfVlNfUFZUX01FTV9BRERSKSwKKwlSRUdfQURSRU5PX0RFRklORShSRUdfQURSRU5P X1NQX0ZTX1BWVF9NRU1fQUREUl9SRUcsCisJCQlSRUdfQTRYWF9TUF9GU19QVlRfTUVNX0FERFIp LAorCVJFR19BRFJFTk9fREVGSU5FKFJFR19BRFJFTk9fU1BfVlNfT0JKX1NUQVJUX1JFRywKKwkJ CVJFR19BNFhYX1NQX1ZTX09CSl9TVEFSVCksCisJUkVHX0FEUkVOT19ERUZJTkUoUkVHX0FEUkVO T19TUF9GU19PQkpfU1RBUlRfUkVHLAorCQkJUkVHX0E0WFhfU1BfRlNfT0JKX1NUQVJUKSwKKwlS RUdfQURSRU5PX0RFRklORShSRUdfQURSRU5PX1JCQk1fUkJCTV9DVEwsIFJFR19BNFhYX1JCQk1f UkJCTV9DVEwpLAorCVJFR19BRFJFTk9fREVGSU5FKFJFR19BRFJFTk9fUkJCTV9TV19SRVNFVF9D TUQsCisJCQlSRUdfQTRYWF9SQkJNX1NXX1JFU0VUX0NNRCksCisJUkVHX0FEUkVOT19ERUZJTkUo UkVHX0FEUkVOT19VQ0hFX0lOVkFMSURBVEUwLAorCQkJUkVHX0E0WFhfVUNIRV9JTlZBTElEQVRF MCksCisJUkVHX0FEUkVOT19ERUZJTkUoUkVHX0FEUkVOT19SQkJNX1BFUkZDVFJfTE9BRF9WQUxV RV9MTywKKwkJCVJFR19BNFhYX1JCQk1fUEVSRkNUUl9MT0FEX1ZBTFVFX0xPKSwKKwlSRUdfQURS RU5PX0RFRklORShSRUdfQURSRU5PX1JCQk1fUEVSRkNUUl9MT0FEX1ZBTFVFX0hJLAorCQkJUkVH X0E0WFhfUkJCTV9QRVJGQ1RSX0xPQURfVkFMVUVfSEkpLAorfTsKKworc3RhdGljIGNvbnN0IHN0 cnVjdCBhZHJlbm9fcmVnX29mZnNldHMgcmVnX29mZnNldHMgPSB7CisJLm9mZnNldHMgPSBhNHh4 X3JlZ2lzdGVyX29mZnNldHMsCit9OworCitzdGF0aWMgdm9pZCBhNHh4X2R1bXAoc3RydWN0IG1z bV9ncHUgKmdwdSkKK3sKKwlhZHJlbm9fZHVtcChncHUpOworCXByaW50aygic3RhdHVzOiAgICUw OHhcbiIsCisJCQlncHVfcmVhZChncHUsIFJFR19BNFhYX1JCQk1fU1RBVFVTKSk7CisJYWRyZW5v X2R1bXAoZ3B1KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhZHJlbm9fZ3B1X2Z1bmNzIGZ1 bmNzID0geworCS5iYXNlID0geworCQkuZ2V0X3BhcmFtID0gYWRyZW5vX2dldF9wYXJhbSwKKwkJ Lmh3X2luaXQgPSBhNHh4X2h3X2luaXQsCisJCS5wbV9zdXNwZW5kID0gbXNtX2dwdV9wbV9zdXNw ZW5kLAorCQkucG1fcmVzdW1lID0gbXNtX2dwdV9wbV9yZXN1bWUsCisJCS5yZWNvdmVyID0gYTR4 eF9yZWNvdmVyLAorCQkubGFzdF9mZW5jZSA9IGFkcmVub19sYXN0X2ZlbmNlLAorCQkuc3VibWl0 ID0gYWRyZW5vX3N1Ym1pdCwKKwkJLmZsdXNoID0gYWRyZW5vX2ZsdXNoLAorCQkuaWRsZSA9IGE0 eHhfaWRsZSwKKwkJLmlycSA9IGE0eHhfaXJxLAorCQkuZGVzdHJveSA9IGE0eHhfZGVzdHJveSwK KyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwkJLnNob3cgPSBhNHh4X3Nob3csCisjZW5kaWYKKwl9 LAorfTsKKworc3RydWN0IG1zbV9ncHUgKmE0eHhfZ3B1X2luaXQoc3RydWN0IGRybV9kZXZpY2Ug KmRldikKK3sKKwlzdHJ1Y3QgYTR4eF9ncHUgKmE0eHhfZ3B1ID0gTlVMTDsKKwlzdHJ1Y3QgYWRy ZW5vX2dwdSAqYWRyZW5vX2dwdTsKKwlzdHJ1Y3QgbXNtX2dwdSAqZ3B1OworCXN0cnVjdCBtc21f ZHJtX3ByaXZhdGUgKnByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYgPSBwcml2LT5ncHVfcGRldjsKKwlpbnQgcmV0OworCisJaWYgKCFwZGV2KSB7 CisJCWRldl9lcnIoZGV2LT5kZXYsICJubyBhNHh4IGRldmljZVxuIik7CisJCXJldCA9IC1FTlhJ TzsKKwkJZ290byBmYWlsOworCX0KKworCWE0eHhfZ3B1ID0ga3phbGxvYyhzaXplb2YoKmE0eHhf Z3B1KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhNHh4X2dwdSkgeworCQlyZXQgPSAtRU5PTUVNOwor CQlnb3RvIGZhaWw7CisJfQorCisJYWRyZW5vX2dwdSA9ICZhNHh4X2dwdS0+YmFzZTsKKwlncHUg PSAmYWRyZW5vX2dwdS0+YmFzZTsKKworCWE0eHhfZ3B1LT5wZGV2ID0gcGRldjsKKworCWdwdS0+ cGVyZmNudHJzID0gTlVMTDsKKwlncHUtPm51bV9wZXJmY250cnMgPSAwOworCisJYWRyZW5vX2dw dS0+cmVnaXN0ZXJzID0gYTR4eF9yZWdpc3RlcnM7CisJYWRyZW5vX2dwdS0+cmVnX29mZnNldHMg PSAmcmVnX29mZnNldHM7CisKKwlyZXQgPSBhZHJlbm9fZ3B1X2luaXQoZGV2LCBwZGV2LCBhZHJl bm9fZ3B1LCAmZnVuY3MpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsKKworCS8qIGlmIG5lZWRl ZCwgYWxsb2NhdGUgZ21lbTogKi8KKwlpZiAoYWRyZW5vX2lzX2E0eHgoYWRyZW5vX2dwdSkpIHsK KyNpZmRlZiBDT05GSUdfTVNNX09DTUVNCisJCS8qIFRPRE8gdGhpcyBpcyBkaWZmZXJlbnQvbWlz c2luZyB1cHN0cmVhbTogKi8KKwkJc3RydWN0IG9jbWVtX2J1ZiAqb2NtZW1faGRsID0KKwkJCQlv Y21lbV9hbGxvY2F0ZShPQ01FTV9HUkFQSElDUywgYWRyZW5vX2dwdS0+Z21lbSk7CisKKwkJYTR4 eF9ncHUtPm9jbWVtX2hkbCA9IG9jbWVtX2hkbDsKKwkJYTR4eF9ncHUtPm9jbWVtX2Jhc2UgPSBv Y21lbV9oZGwtPmFkZHI7CisJCWFkcmVub19ncHUtPmdtZW0gPSBvY21lbV9oZGwtPmxlbjsKKwkJ REJHKCJ1c2luZyAlZEsgb2YgT0NNRU0gYXQgMHglMDh4IiwgYWRyZW5vX2dwdS0+Z21lbSAvIDEw MjQsCisJCQkJYTR4eF9ncHUtPm9jbWVtX2Jhc2UpOworI2VuZGlmCisJfQorCisJaWYgKCFncHUt Pm1tdSkgeworCQkvKiBUT0RPIHdlIHRoaW5rIGl0IGlzIHBvc3NpYmxlIHRvIGNvbmZpZ3VyZSB0 aGUgR1BVIHRvCisJCSAqIHJlc3RyaWN0IGFjY2VzcyB0byBWUkFNIGNhcnZlb3V0LiAgQnV0IHRo ZSByZXF1aXJlZAorCQkgKiByZWdpc3RlcnMgYXJlIHVua25vd24uICBGb3Igbm93IGp1c3QgYmFp bCBvdXQgYW5kCisJCSAqIGxpbXAgYWxvbmcgd2l0aCBqdXN0IG1vZGVzZXR0aW5nLiAgSWYgaXQg dHVybnMgb3V0CisJCSAqIHRvIG5vdCBiZSBwb3NzaWJsZSB0byByZXN0cmljdCBhY2Nlc3MsIHRo ZW4gd2UgbXVzdAorCQkgKiBpbXBsZW1lbnQgYSBjbWRzdHJlYW0gdmFsaWRhdG9yLgorCQkgKi8K KwkJZGV2X2VycihkZXYtPmRldiwgIk5vIG1lbW9yeSBwcm90ZWN0aW9uIHdpdGhvdXQgSU9NTVVc biIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZmFpbDsKKwl9CisKKwlyZXR1cm4gZ3B1Owor CitmYWlsOgorCWlmIChhNHh4X2dwdSkKKwkJYTR4eF9kZXN0cm95KCZhNHh4X2dwdS0+YmFzZS5i YXNlKTsKKworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2FkcmVuby9hNHh4X2dwdS5oCmIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8v YTR4eF9ncHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTI0NzIwCi0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTR4eF9ncHUuaApA QCAtMCwwICsxLDM0IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIExpbnV4IEZvdW5kYXRp b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFu ZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKyNpZm5kZWYgX19B NFhYX0dQVV9IX18KKyNkZWZpbmUgX19BNFhYX0dQVV9IX18KKworI2luY2x1ZGUgImFkcmVub19n cHUuaCIKKworLyogYXJyZywgc29tZWhvdyBmYi5oIGlzIGdldHRpbmcgcHVsbGVkIGluOiAqLwor I3VuZGVmIFJPUF9DT1BZCisjdW5kZWYgUk9QX1hPUgorCisjaW5jbHVkZSAiYTR4eC54bWwuaCIK Kworc3RydWN0IGE0eHhfZ3B1IHsKKwlzdHJ1Y3QgYWRyZW5vX2dwdSBiYXNlOworCXN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisKKwkvKiBpZiBPQ01FTSBpcyB1c2VkIGZvciBHTUVNOiAq LworCXVpbnQzMl90IG9jbWVtX2Jhc2U7CisJdm9pZCAqb2NtZW1faGRsOworfTsKKyNkZWZpbmUg dG9fYTR4eF9ncHUoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBhNHh4X2dwdSwgYmFzZSkKKwor I2VuZGlmIC8qIF9fQTRYWF9HUFVfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2FkcmVuby9hZHJlbm9fZGV2aWNlLmMKYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9h ZHJlbm9fZGV2aWNlLmMKaW5kZXggN2FiODVhZi4uYmU4M2RlZSAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2RldmljZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vYWRyZW5vL2FkcmVub19kZXZpY2UuYwpAQCAtMiw2ICsyLDggQEAKICAqIENvcHlyaWdo dCAoQykgMjAxMy0yMDE0IFJlZCBIYXQKICAqIEF1dGhvcjogUm9iIENsYXJrIDxyb2JkY2xhcmtA Z21haWwuY29tPgogICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBUaGUgTGludXggRm91bmRhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMK cHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgpAQCAtMjgsNiAr MzAsNyBAQCBNT0RVTEVfUEFSTV9ERVNDKGhhbmdfZGVidWcsICJEdW1wIHJlZ2lzdGVycyB3aGVu IGhhbmcKaXMgZGV0ZWN0ZWQgKGNhbiBiZSBzbG93IQogbW9kdWxlX3BhcmFtX25hbWVkKGhhbmdf ZGVidWcsIGhhbmdfZGVidWcsIGJvb2wsIDA2MDApOwoKIHN0cnVjdCBtc21fZ3B1ICphM3h4X2dw dV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworc3RydWN0IG1zbV9ncHUgKmE0eHhfZ3B1 X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cgogc3RhdGljIGNvbnN0IHN0cnVjdCBhZHJl bm9faW5mbyBncHVsaXN0W10gPSB7CiAJewpAQCAtNTQsNiArNTcsMTQgQEAgc3RhdGljIGNvbnN0 IHN0cnVjdCBhZHJlbm9faW5mbyBncHVsaXN0W10gPSB7CiAJCS5wZnBmdyA9ICJhMzMwX3BmcC5m dyIsCiAJCS5nbWVtICA9IFNaXzFNLAogCQkuaW5pdCAgPSBhM3h4X2dwdV9pbml0LAorCX0sIHsK KwkJLnJldiAgID0gQURSRU5PX1JFVig0LCAyLCAwLCBBTllfSUQpLAorCQkucmV2biAgPSA0MjAs CisJCS5uYW1lICA9ICJBNDIwIiwKKwkJLnBtNGZ3ID0gImE0MjBfcG00LmZ3IiwKKwkJLnBmcGZ3 ID0gImE0MjBfcGZwLmZ3IiwKKwkJLmdtZW0gID0gKFNaXzFNICsgU1pfNTEySyksCisJCS5pbml0 ICA9IGE0eHhfZ3B1X2luaXQsCiAJfSwKIH07CgpAQCAtNjEsNiArNzIsOCBAQCBNT0RVTEVfRklS TVdBUkUoImEzMDBfcG00LmZ3Iik7CiBNT0RVTEVfRklSTVdBUkUoImEzMDBfcGZwLmZ3Iik7CiBN T0RVTEVfRklSTVdBUkUoImEzMzBfcG00LmZ3Iik7CiBNT0RVTEVfRklSTVdBUkUoImEzMzBfcGZw LmZ3Iik7CitNT0RVTEVfRklSTVdBUkUoImE0MjBfcG00LmZ3Iik7CitNT0RVTEVfRklSTVdBUkUo ImE0MjBfcGZwLmZ3Iik7Cgogc3RhdGljIGlubGluZSBib29sIF9yZXZfbWF0Y2godWludDhfdCBl bnRyeSwgdWludDhfdCBpZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRy ZW5vL2FkcmVub19ncHUuYwpiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUu YwppbmRleCA4MjYxOWIxLi4xZmU3YzhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2FkcmVuby9hZHJlbm9fZ3B1LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRy ZW5vX2dwdS5jCkBAIC0xNDcsNyArMTQ3LDcgQEAgaW50IGFkcmVub19zdWJtaXQoc3RydWN0IG1z bV9ncHUgKmdwdSwgc3RydWN0Cm1zbV9nZW1fc3VibWl0ICpzdWJtaXQsCiAJT1VUX1BLVDAocmlu ZywgUkVHX0FYWFhfQ1BfU0NSQVRDSF9SRUcyLCAxKTsKIAlPVVRfUklORyhyaW5nLCBzdWJtaXQt PmZlbmNlKTsKCi0JaWYgKGFkcmVub19pc19hM3h4KGFkcmVub19ncHUpKSB7CisJaWYgKGFkcmVu b19pc19hM3h4KGFkcmVub19ncHUpIHx8IGFkcmVub19pc19hNHh4KGFkcmVub19ncHUpKSB7CiAJ CS8qIEZsdXNoIEhMU1EgbGF6eSB1cGRhdGVzIHRvIG1ha2Ugc3VyZSB0aGVyZSBpcyBub3RoaW5n CiAJCSAqIHBlbmRpbmcgZm9yIGluZGlyZWN0IGxvYWRzIGFmdGVyIHRoZSB0aW1lc3RhbXAgaGFz CiAJCSAqIHBhc3NlZDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2Fk cmVub19ncHUuaApiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUuaAppbmRl eCBlYzg0ZDc5Li4zZmEwNmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVu by9hZHJlbm9fZ3B1LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2dw dS5oCkBAIC0yMjUsNiArMjI1LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhZHJlbm9faXNfYTMz MHYyKHN0cnVjdAphZHJlbm9fZ3B1ICpncHUpCiAJcmV0dXJuIGFkcmVub19pc19hMzMwKGdwdSkg JiYgKGdwdS0+cmV2LnBhdGNoaWQgPiAwKTsKIH0KCitzdGF0aWMgaW5saW5lIGJvb2wgYWRyZW5v X2lzX2E0eHgoc3RydWN0IGFkcmVub19ncHUgKmdwdSkKK3sKKwlyZXR1cm4gKGdwdS0+cmV2biA+ PSA0MDApICYmIChncHUtPnJldm4gPCA1MDApOworfQorCitzdGF0aWMgaW5saW5lIGludCBhZHJl bm9faXNfYTQyMChzdHJ1Y3QgYWRyZW5vX2dwdSAqZ3B1KQoreworCXJldHVybiBncHUtPnJldm4g PT0gNDIwOworfQorCiBpbnQgYWRyZW5vX2dldF9wYXJhbShzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCB1 aW50MzJfdCBwYXJhbSwgdWludDY0X3QgKnZhbHVlKTsKIGludCBhZHJlbm9faHdfaW5pdChzdHJ1 Y3QgbXNtX2dwdSAqZ3B1KTsKIHVpbnQzMl90IGFkcmVub19sYXN0X2ZlbmNlKHN0cnVjdCBtc21f Z3B1ICpncHUpOwpAQCAtMjg5LDggKzI5OSw4IEBAIHN0YXRpYyBpbmxpbmUgdTMyIGFkcmVub19n cHVfcmVhZChzdHJ1Y3QgYWRyZW5vX2dwdQoqZ3B1LAogewogCXUzMiByZWcgPSBncHUtPnJlZ19v ZmZzZXRzLT5vZmZzZXRzW29mZnNldF9uYW1lXTsKIAl1MzIgdmFsID0gMDsKLQlpZihhZHJlbm9f cmVnX2NoZWNrKGdwdSxvZmZzZXRfbmFtZSkpCi0JCXZhbCA9IGdwdV9yZWFkKCZncHUtPmJhc2Us cmVnKTsKKwlpZihhZHJlbm9fcmVnX2NoZWNrKGdwdSwgb2Zmc2V0X25hbWUpKQorCQl2YWwgPSBn cHVfcmVhZCgmZ3B1LT5iYXNlLCByZWcpOwogCXJldHVybiB2YWw7CiB9CgotLSAKMS44LjUuMgoK LS0gClF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuClRoZSBRdWFsY29tbSBJbm5vdmF0 aW9uIENlbnRlciwgSW5jLiBpcyBhIG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgRm9ydW0sCmEg TGludXggRm91bmRhdGlvbiBDb2xsYWJvcmF0aXZlIFByb2plY3QKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmkt ZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK