From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Zhong Subject: [v14 PATCH 5/5] drm/rockchip: cdn-dp: add cdn DP support for rk3399 Date: Tue, 23 Aug 2016 22:17:05 -0700 Message-ID: <1472015825-11365-6-git-send-email-zyw@rock-chips.com> References: <1472015825-11365-1-git-send-email-zyw@rock-chips.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1472015825-11365-1-git-send-email-zyw@rock-chips.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dianders@chromium.org, tfiga@chromium.org, heiko@sntech.de, yzq@rock-chips.com, groeck@chromium.org, myungjoo.ham@samsung.com, cw00.choi@samsung.com, wulf@rock-chips.com, marcheu@chromium.org, briannorris@chromium.org Cc: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, Chris Zhong , linux-arm-kernel@lists.infradead.org List-Id: linux-rockchip.vger.kernel.org QWRkIHN1cHBvcnQgZm9yIGNkbiBEUCBjb250cm9sbGVyIHdoaWNoIGlzIGVtYmVkZGVkIGluIHRo ZSByazMzOTkKU29Dcy4gVGhlIERQIGlzIGNvbXBsaWFudCB3aXRoIERpc3BsYXlQb3J0IFNwZWNp ZmljYXRpb24sClZlcnNpb24gMS4zLCBUaGlzIElQIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgcm9j a2NoaXAgdHlwZS1jIFBIWSBJUC4KVGhlcmUgaXMgYSB1Q1BVIGluIERQIGNvbnRyb2xsZXIsIGl0 IG5lZWQgYSBmaXJtd2FyZSB0byB3b3JrLApwbGVhc2UgcHV0IHRoZSBmaXJtd2FyZSBmaWxlIHRv IC9saWIvZmlybXdhcmUvcm9ja2NoaXAvZHB0eC5iaW4uIFRoZQp1Q1BVIGluIGNoYXJnZSBvZiBh dXggY29tbXVuaWNhdGlvbiBhbmQgbGluayB0cmFpbmluZywgdGhlIGhvc3QgdXNlCm1haWxib3gg dG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgdWNwdS4KVGhlIGRjbGsgcGluX3BvbCBvZiB2b3AgbXVz dCBub3QgYmUgaW52ZXJ0IGZvciBEUC4KClNpZ25lZC1vZmYtYnk6IENocmlzIFpob25nIDx6eXdA cm9jay1jaGlwcy5jb20+ClJldmlld2VkLWJ5OiBTZWFuIFBhdWwgPHNlYW5wYXVsQGNocm9taXVt Lm9yZz4KQWNrZWQtYnk6IE1hcmsgWWFvIDxtYXJrLnlhb0Byb2NrLWNoaXBzLmNvbT4KCi0tLQoK Q2hhbmdlcyBpbiB2MTQ6Ci0gY2hhbmdlIHN1cGVyIHNwZWVkIHByb3BlcnR5IG5hbWUgdG8gRVhU Q09OX1BST1BfVVNCX1NTCi0gZG8gYSBjb3JyZWN0IG1vZGVfdmFsaWQgY2hlY2sgd2hlbiBicGMg aXMgMAoKQ2hhbmdlcyBpbiB2MTM6Ci0gc3VwcG9ydCBzdXNwZW5kL3Jlc3VtZQotIHN3aXRjaCBw b3dlciBkb21haW4gZHluYW1pY2FsbHkKLSByZS10cmFpbmluZyB3aGVuIGhwZCBzaWduYWwgaXMg dHJpZ2dlcmVkCgpDaGFuZ2VzIGluIHYxMjoKLSB1c2UgRVhUQ09OX1BST1BfVVNCX1NVUEVSU1BF RUQgdG8gcmVwbGFjZSBFWFRDT05fVVNCX0hPU1QKCkNoYW5nZXMgaW4gdjExOgotIGFkZCBiZXN0 X2VuY29kZXIgYmFjaywgc2luY2UgaXQgcmVxdWlyZWQgYnkgZHJtX2F0b21pY19oZWxwZXJfY2hl Y2sKCkNoYW5nZXMgaW4gdjEwOgotIHJlbW92ZSBiZXN0X2VuY29kZXIgb3BzCi0gc3VwcG9ydCBy ZWFkIHNpbmsgY291bnQgZnJvbSBEUENECi0gY29udHJvbCB0aGUgZ3JmX2NsayBpbiBEUAoKQ2hh bmdlcyBpbiB2OToKLSBkbyBub3QgbmVlZCByZXNldCB0aGUgcGh5IGJlZm9yZSBwb3dlcl9vbgot IGFkZCBhIG9yaWVudGF0aW9uIGluZm9ybWF0aW9uIGZvciBzZXRfY2FwYWJpbGl0eQotIHJldHJ5 IHRvIHJlYWQgZHBjZCBpbiAxMCBzZWNvbmRzCgpDaGFuZ2VzIGluIHY4OgotIG9wdGltaXphdGlv biB0aGUgZXJyIGxvZwoKQ2hhbmdlcyBpbiB2NzoKLSBzdXBwb3J0IGZpcm13YXJlIHN0YW5kYnkg d2hlbiBubyBkcHR4IGNvbm5lY3Rpb24KLSBvcHRpbWl6YXRpb24gdGhlIGNhbGN1bGF0aW9uIG9m IHR1IHNpemUgYW5kIHZhbGlkIHN5bWJvbAoKQ2hhbmdlcyBpbiB2NjoKLSBhZGQgYSBwb3J0IHN0 cnVjdAotIHNlbGVjdCBTTkRfU09DX0hETUlfQ09ERUMKLSBmb3JjZSByZXNldCB0aGUgcGh5IHdo ZW4gaHBkIGRldGVjdGVkCgpDaGFuZ2VzIGluIHY1OgotIGFscGhhYmV0aWNhbCBvcmRlcgotIGRv IG5vdCB1c2UgbG9uZywgdXNlIHUzMiBvciB1NjQKLSByZXR1cm4gTU9ERV9DTE9DS19ISUdIIHdo ZW4gcmVxdWVzdGVkID4gYWN0dWFsCi0gT3B0aW1pemVkIENvZGluZyBTdHlsZQotIGFkZCBhIGZv cm11bGEgdG8gZ2V0IGJldHRlciB0dSBzaXplIGFuZCBzeW1ib2wgdmFsdWUuCi0gbW9kaWZ5IGFj Y29yZGluZyB0byBTZWFuIFBhdWwncyBjb21tZW50cwotIGZpeGVkIHRoZSBmd193YWl0IGFsd2F5 cyAwCgpDaGFuZ2VzIGluIHY0OgotIHVzZSBwaHkgZnJhbWV3b3JrIHRvIGNvbnRyb2wgRFAgcGh5 Ci0gc3VwcG9ydCAyIHBoeXMKCkNoYW5nZXMgaW4gdjM6Ci0gdXNlIEVYVENPTl9ESVNQX0RQIGFu ZCBFWFRDT05fRElTUF9EUF9BTFQgY2FibGUgdG8gZ2V0IGRwIHBvcnQgc3RhdGUuCi0gcmVzZXQg c3BkaWYgYmVmb3JlIGNvbmZpZyBpdAotIG1vZGlmeSB0aGUgZmlybXdhcmUgY2xrIHRvIDEwME1o egotIHJldHJ5IGxvYWQgZmlybXdhcmUgaWYgZncgZmlsZSBpcyByZXF1ZXN0ZWQgdG9vIGVhcmx5 CgpDaGFuZ2VzIGluIHYyOgotIEFscGhhYmV0aWMgb3JkZXIKLSByZW1vdmUgZXhjZXNzIGVycm9y IG1lc3NhZ2UKLSB1c2UgZGVmaW5lIGNsa19yYXRlCi0gY2hlY2sgYWxsIHJldHVybiB2YWx1ZQot IHJlbW92ZSBkZXZfc2V0X25hbWUoZHAtPmRldiwgImNkbi1kcCIpOwotIHVzZSBzY2hlZHVsZV9k ZWxheWVkX3dvcmsKLSByZW1vdmUgbmV2ZXItY2FsbGVkIGZ1bmN0aW9ucwotIHJlbW92ZSBzb21l IHVubmVjZXNzYXJ5ICgpCgpDaGFuZ2VzIGluIHYxOgotIHVzZSBleHRjb24gQVBJCi0gdXNlIGhk bWktY29kZWMgZm9yIHRoZSBEUCBBc29jCi0gZG8gbm90IGluaXRpYWxpemUgdGhlICJyZXQiCi0g cHJpbnRrIGEgZXJyIGxvZyB3aGVuIGRybV9vZl9lbmNvZGVyX2FjdGl2ZV9lbmRwb2ludF9pZAot IG1vZGlmeSB0aGUgZGNsayBwaW5fcG9sIHRvIGEgc2luZ2xlIGxpbmUKCiBkcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvS2NvbmZpZyAgICAgICAgICAgIHwgICAxMCArCiBkcml2ZXJzL2dwdS9kcm0v cm9ja2NoaXAvTWFrZWZpbGUgICAgICAgICAgIHwgICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vcm9j a2NoaXAvY2RuLWRwLWNvcmUuYyAgICAgIHwgMTA2NyArKysrKysrKysrKysrKysrKysrKysrKysr KysKIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtY29yZS5oICAgICAgfCAgMTA2ICsr KwogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1yZWcuYyAgICAgICB8ICA5NTkgKysr KysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLXJl Zy5oICAgICAgIHwgIDQ4MiArKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9y b2NrY2hpcF9kcm1fdm9wLmMgfCAgIDEzICstCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9j a2NoaXBfZHJtX3ZvcC5oIHwgICAgOSArCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2No aXBfdm9wX3JlZy5jIHwgICAgMiArCiA5IGZpbGVzIGNoYW5nZWQsIDI2NDYgaW5zZXJ0aW9ucygr KSwgMyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcm9j a2NoaXAvY2RuLWRwLWNvcmUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9y b2NrY2hpcC9jZG4tZHAtY29yZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L3JvY2tjaGlwL2Nkbi1kcC1yZWcuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9yb2NrY2hpcC9jZG4tZHAtcmVnLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9j a2NoaXAvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9LY29uZmlnCmluZGV4IGQz MGJkYzMuLjIwYWFhZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9LY29u ZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9LY29uZmlnCkBAIC0yNSw2ICsyNSwx NiBAQCBjb25maWcgUk9DS0NISVBfQU5BTE9HSVhfRFAKIAkgIGZvciB0aGUgQW5hbG9naXggQ29y ZSBEUCBkcml2ZXIuIElmIHlvdSB3YW50IHRvIGVuYWJsZSBEUAogCSAgb24gUkszMjg4IGJhc2Vk IFNvQywgeW91IHNob3VsZCBzZWxldCB0aGlzIG9wdGlvbi4KIAorY29uZmlnIFJPQ0tDSElQX0NE Tl9EUAorICAgICAgICB0cmlzdGF0ZSAiUm9ja2NoaXAgY2RuIERQIgorICAgICAgICBkZXBlbmRz IG9uIERSTV9ST0NLQ0hJUAorCXNlbGVjdCBTTkRfU09DX0hETUlfQ09ERUMgaWYgU05EX1NPQwor ICAgICAgICBoZWxwCisJICBUaGlzIHNlbGVjdHMgc3VwcG9ydCBmb3IgUm9ja2NoaXAgU29DIHNw ZWNpZmljIGV4dGVuc2lvbnMKKwkgIGZvciB0aGUgY2RuIERQIGRyaXZlci4gSWYgeW91IHdhbnQg dG8gZW5hYmxlIERwIG9uCisJICBSSzMzOTkgYmFzZWQgU29DLCB5b3Ugc2hvdWxkIHNlbGVjdCB0 aGlzCisJICBvcHRpb24uCisKIGNvbmZpZyBST0NLQ0hJUF9EV19IRE1JCiAgICAgICAgIHRyaXN0 YXRlICJSb2NrY2hpcCBzcGVjaWZpYyBleHRlbnNpb25zIGZvciBTeW5vcHN5cyBEVyBIRE1JIgog ICAgICAgICBkZXBlbmRzIG9uIERSTV9ST0NLQ0hJUApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3JvY2tjaGlwL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxl CmluZGV4IDk3NDYzNjUuLjZhMDc4MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2Nr Y2hpcC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUKQEAg LTcsNiArNyw3IEBAIHJvY2tjaGlwZHJtLXkgOj0gcm9ja2NoaXBfZHJtX2Rydi5vIHJvY2tjaGlw X2RybV9mYi5vIFwKIHJvY2tjaGlwZHJtLSQoQ09ORklHX0RSTV9GQkRFVl9FTVVMQVRJT04pICs9 IHJvY2tjaGlwX2RybV9mYmRldi5vCiAKIG9iai0kKENPTkZJR19ST0NLQ0hJUF9BTkFMT0dJWF9E UCkgKz0gYW5hbG9naXhfZHAtcm9ja2NoaXAubworb2JqLSQoQ09ORklHX1JPQ0tDSElQX0NETl9E UCkgKz0gY2RuLWRwLWNvcmUubyBjZG4tZHAtcmVnLm8KIG9iai0kKENPTkZJR19ST0NLQ0hJUF9E V19IRE1JKSArPSBkd19oZG1pLXJvY2tjaGlwLm8KIG9iai0kKENPTkZJR19ST0NLQ0hJUF9EV19N SVBJX0RTSSkgKz0gZHctbWlwaS1kc2kubwogb2JqLSQoQ09ORklHX1JPQ0tDSElQX0lOTk9fSERN SSkgKz0gaW5ub19oZG1pLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9j ZG4tZHAtY29yZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1jb3JlLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhiZGZkMQotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtY29yZS5jCkBAIC0wLDAgKzEsMTA2 NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgRnV6aG91IFJvY2tjaGlwIEVsZWN0cm9uaWNzIENv Lkx0ZAorICogQXV0aG9yOiBDaHJpcyBaaG9uZyA8enl3QHJvY2stY2hpcHMuY29tPgorICoKKyAq IFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRl ZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9t aWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUg PGRybS9kcm1fZHBfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9vZi5oPgorCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGlu dXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvZXh0Y29uLmg+CisjaW5jbHVkZSA8bGlu dXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51 eC9yZXNldC5oPgorCisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgorI2luY2x1ZGUgPGxp bnV4L3BoeS9waHkuaD4KKworI2luY2x1ZGUgPHNvdW5kL2hkbWktY29kZWMuaD4KKworI2luY2x1 ZGUgImNkbi1kcC1jb3JlLmgiCisjaW5jbHVkZSAiY2RuLWRwLXJlZy5oIgorI2luY2x1ZGUgInJv Y2tjaGlwX2RybV92b3AuaCIKKworI2RlZmluZSBjb25uZWN0b3JfdG9fZHAoYykgXAorCQljb250 YWluZXJfb2YoYywgc3RydWN0IGNkbl9kcF9kZXZpY2UsIGNvbm5lY3RvcikKKworI2RlZmluZSBl bmNvZGVyX3RvX2RwKGMpIFwKKwkJY29udGFpbmVyX29mKGMsIHN0cnVjdCBjZG5fZHBfZGV2aWNl LCBlbmNvZGVyKQorCisjZGVmaW5lIEdSRl9TT0NfQ09OOQkJMHg2MjI0CisjZGVmaW5lIERQX1NF TF9WT1BfTElUCQlCSVQoMTIpCisjZGVmaW5lIEdSRl9TT0NfQ09OMjYJCTB4NjI2OAorI2RlZmlu ZSBVUEhZX1NFTF9CSVQJCTMKKyNkZWZpbmUgVVBIWV9TRUxfTUFTSwkJQklUKDE5KQorI2RlZmlu ZSBEUFRYX0hQRF9TRUwJCSgzIDw8IDEyKQorI2RlZmluZSBEUFRYX0hQRF9ERUwJCSgyIDw8IDEy KQorI2RlZmluZSBEUFRYX0hQRF9TRUxfTUFTSwkoMyA8PCAyOCkKKworI2RlZmluZSBNQVhfRldf V0FJVF9TRUNTCTY0CisjZGVmaW5lIENETl9EUF9GSVJNV0FSRQkJInJvY2tjaGlwL2RwdHguYmlu IgorCitzdHJ1Y3QgY2RuX2RwX2RhdGEgeworCXU4IG1heF9waHk7Cit9OworCitzdHJ1Y3QgY2Ru X2RwX2RhdGEgcmszMzk5X2Nkbl9kcCA9IHsKKwkubWF4X3BoeSA9IDIsCit9OworCitzdGF0aWMg Y29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBjZG5fZHBfZHRfaWRzW10gPSB7CisJeyAuY29tcGF0 aWJsZSA9ICJyb2NrY2hpcCxyazMzOTktY2RuLWRwIiwKKwkJLmRhdGEgPSAodm9pZCAqKSZyazMz OTlfY2RuX2RwIH0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGNkbl9kcF9k dF9pZHMpOworCitzdGF0aWMgaW50IGNkbl9kcF9ncmZfd3JpdGUoc3RydWN0IGNkbl9kcF9kZXZp Y2UgKmRwLAorCQkJICAgIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWwpCit7CisJ aW50IHJldDsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkcC0+Z3JmX2Nsayk7CisJaWYg KHJldCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJGYWlsZWQgdG8gcHJlcGFyZV9lbmFibGUgZ3Jm IGNsb2NrXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSByZWdtYXBfd3JpdGUoZHAt PmdyZiwgcmVnLCB2YWwpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiQ291bGQg bm90IHdyaXRlIHRvIEdSRjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJY2xr X2Rpc2FibGVfdW5wcmVwYXJlKGRwLT5ncmZfY2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IGNkbl9kcF9jbGtfZW5hYmxlKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCkKK3sKKwlp bnQgcmV0OworCXUzMiByYXRlOworCisJcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYyhkcC0+ZGV2 KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJjYW5ub3QgZ2V0IHBtIHJ1 bnRpbWUgJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3BjbGs7CisJfQorCisJcmV0ID0gY2xrX3By ZXBhcmVfZW5hYmxlKGRwLT5wY2xrKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRwLT5k ZXYsICJjYW5ub3QgZW5hYmxlIGRwIHBjbGsgJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3BjbGs7 CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRwLT5jb3JlX2Nsayk7CisJaWYgKHJl dCA8IDApIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiY2Fubm90IGVuYWJsZSBjb3JlX2NsayAlZFxu IiwgcmV0KTsKKwkJZ290byBlcnJfY29yZV9jbGs7CisJfQorCisJcmVzZXRfY29udHJvbF9hc3Nl cnQoZHAtPmRwdHhfcnN0KTsKKwlyZXNldF9jb250cm9sX2Fzc2VydChkcC0+YXBiX3JzdCk7CisJ cmVzZXRfY29udHJvbF9kZWFzc2VydChkcC0+ZHB0eF9yc3QpOworCXJlc2V0X2NvbnRyb2xfZGVh c3NlcnQoZHAtPmFwYl9yc3QpOworCisJcmF0ZSA9IGNsa19nZXRfcmF0ZShkcC0+Y29yZV9jbGsp OworCWlmIChyYXRlIDwgMCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJnZXQgY2xrIHJhdGUgZmFp bGVkOiAlZFxuIiwgcmF0ZSk7CisJCWdvdG8gZXJyX3NldF9yYXRlOworCX0KKworCWNkbl9kcF9z ZXRfZndfY2xrKGRwLCByYXRlKTsKKwljZG5fZHBfY2xvY2tfcmVzZXQoZHApOworCisJcmV0dXJu IDA7CisKK2Vycl9zZXRfcmF0ZToKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHAtPmNvcmVfY2xr KTsKK2Vycl9jb3JlX2NsazoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHAtPnBjbGspOworZXJy X3BjbGs6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgY2RuX2RwX2Nsa19kaXNhYmxl KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCkKK3sKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHAt PnBjbGspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkcC0+Y29yZV9jbGspOworCXBtX3J1bnRp bWVfcHV0X3N5bmMoZHAtPmRldik7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3Rh dHVzCitjZG5fZHBfY29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLCBib29sIGZvcmNlKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGNvbm5lY3Rv cl90b19kcChjb25uZWN0b3IpOworCisJcmV0dXJuIGRwLT5ocGRfc3RhdHVzOworfQorCitzdGF0 aWMgdm9pZCBjZG5fZHBfY29ubmVjdG9yX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvcikKK3sKKwlkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoY29ubmVjdG9yKTsKKwlkcm1f Y29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fY29u bmVjdG9yX2Z1bmNzIGNkbl9kcF9hdG9taWNfY29ubmVjdG9yX2Z1bmNzID0geworCS5kcG1zID0g ZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2RwbXMsCisJLmRldGVjdCA9IGNkbl9kcF9jb25u ZWN0b3JfZGV0ZWN0LAorCS5kZXN0cm95ID0gY2RuX2RwX2Nvbm5lY3Rvcl9kZXN0cm95LAorCS5m aWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5y ZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKKwkuYXRvbWljX2R1cGxp Y2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUs CisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rl c3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgaW50IGNkbl9kcF9jb25uZWN0b3JfZ2V0X21vZGVz KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGNkbl9kcF9kZXZp Y2UgKmRwID0gY29ubmVjdG9yX3RvX2RwKGNvbm5lY3Rvcik7CisJc3RydWN0IGVkaWQgKmVkaWQ7 CisJaW50IHJldCA9IDA7CisKKwllZGlkID0gZHJtX2RvX2dldF9lZGlkKGNvbm5lY3RvciwgY2Ru X2RwX2dldF9lZGlkX2Jsb2NrLCBkcCk7CisJaWYgKGVkaWQpIHsKKwkJZGV2X2RiZyhkcC0+ZGV2 LCAiZ290IGVkaWQ6IHdpZHRoWyVkXSB4IGhlaWdodFslZF1cbiIsCisJCQllZGlkLT53aWR0aF9j bSwgZWRpZC0+aGVpZ2h0X2NtKTsKKworCQlkcC0+c2lua19oYXNfYXVkaW8gPSBkcm1fZGV0ZWN0 X21vbml0b3JfYXVkaW8oZWRpZCk7CisJCXJldCA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0 b3IsIGVkaWQpOworCQlpZiAocmV0KSB7CisJCQlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2Vk aWRfcHJvcGVydHkoY29ubmVjdG9yLAorCQkJCQkJCQllZGlkKTsKKwkJCWRybV9lZGlkX3RvX2Vs ZChjb25uZWN0b3IsIGVkaWQpOworCQl9CisJCWtmcmVlKGVkaWQpOworCX0KKworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2VuY29kZXIgKgorY2RuX2RwX2Nvbm5lY3Rvcl9i ZXN0X2VuY29kZXIoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3Qg Y2RuX2RwX2RldmljZSAqZHAgPSBjb25uZWN0b3JfdG9fZHAoY29ubmVjdG9yKTsKKworCXJldHVy biAmZHAtPmVuY29kZXI7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX2Nvbm5lY3Rvcl9tb2RlX3Zh bGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJICAgICAgIHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGNv bm5lY3Rvcl90b19kcChjb25uZWN0b3IpOworCXN0cnVjdCBkcm1fZGlzcGxheV9pbmZvICpkaXNw bGF5X2luZm8gPSAmZHAtPmNvbm5lY3Rvci5kaXNwbGF5X2luZm87CisJdTMyIHJlcXVlc3RlZCwg YWN0dWFsLCByYXRlLCBzaW5rX21heCwgc291cmNlX21heCA9IDA7CisJdTggbGFuZXMsIGJwYywg aTsKKworCXN3aXRjaCAoZGlzcGxheV9pbmZvLT5icGMpIHsKKwljYXNlIDE2OgorCWNhc2UgMTI6 CisJY2FzZSAxMDoKKwkJYnBjID0gMTA7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJYnBjID0gNjsK KwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnBjID0gODsKKwkJYnJlYWs7CisJfQorCisJcmVxdWVz dGVkID0gbW9kZS0+Y2xvY2sgKiBicGMgKiAzIC8gMTAwMDsKKworCS8qIGZpbmQgdGhlIHJ1bm5p bmcgcG9ydCAqLworCWZvciAoaSA9IDA7IGkgPCBkcC0+cG9ydHM7IGkrKykgeworCQlpZiAoZHAt PnBvcnRbaV0tPnBoeV9zdGF0dXMpIHsKKwkJCXNvdXJjZV9tYXggPSBkcC0+cG9ydFtpXS0+Y2Fw X2xhbmVzOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzaW5rX21heCA9IGRybV9kcF9tYXhfbGFu ZV9jb3VudChkcC0+ZHBjZCk7CisJbGFuZXMgPSBtaW4oc291cmNlX21heCwgc2lua19tYXgpOwor CisJc291cmNlX21heCA9IGRybV9kcF9id19jb2RlX3RvX2xpbmtfcmF0ZShDRE5fRFBfTUFYX0xJ TktfUkFURSk7CisJc2lua19tYXggPSBkcm1fZHBfbWF4X2xpbmtfcmF0ZShkcC0+ZHBjZCk7CisJ cmF0ZSA9IG1pbihzb3VyY2VfbWF4LCBzaW5rX21heCk7CisKKwlhY3R1YWwgPSByYXRlICogbGFu ZXMgLyAxMDA7CisKKwkvKiBlZmZpY2llbmN5IGlzIGFib3V0IDAuOCAqLworCWFjdHVhbCA9IGFj dHVhbCAqIDggLyAxMDsKKworCWlmIChyZXF1ZXN0ZWQgPiBhY3R1YWwpIHsKKwkJZGV2X2RiZyhk cC0+ZGV2LCAicmVxdWVzdGVkPSVkLCBhY3R1YWw9JWQsIGNsb2NrPSVkXG4iLAorCQkJcmVxdWVz dGVkLCBhY3R1YWwsIG1vZGUtPmNsb2NrKTsKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKKwl9 CisKKwlyZXR1cm4gTU9ERV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yX2hl bHBlcl9mdW5jcyBjZG5fZHBfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0X21vZGVz ID0gY2RuX2RwX2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCisJLmJlc3RfZW5jb2RlciA9IGNkbl9kcF9j b25uZWN0b3JfYmVzdF9lbmNvZGVyLAorCS5tb2RlX3ZhbGlkID0gY2RuX2RwX2Nvbm5lY3Rvcl9t b2RlX3ZhbGlkLAorfTsKKworc3RhdGljIHZvaWQgY2RuX2RwX2NvbW1pdChzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwID0gZW5jb2Rlcl90 b19kcChlbmNvZGVyKTsKKwlpbnQgcmV0OworCisJcmV0ID0gY2RuX2RwX3RyYWluaW5nX3N0YXJ0 KGRwKTsKKwlpZiAocmV0KQorCQlyZXR1cm47CisKKwlyZXQgPSBjZG5fZHBfZ2V0X3RyYWluaW5n X3N0YXR1cyhkcCk7CisJaWYgKHJldCkKKwkJcmV0dXJuOworCisJZGV2X2luZm8oZHAtPmRldiwg InJhdGU6MHgleCwgbGFuZXM6JWRcbiIsCisJCSBkcC0+bGluay5yYXRlLCBkcC0+bGluay5udW1f bGFuZXMpOworCisJaWYgKGNkbl9kcF9zZXRfdmlkZW9fc3RhdHVzKGRwLCBDT05UUk9MX1ZJREVP X0lETEUpKQorCQlyZXR1cm47CisKKwlpZiAoY2RuX2RwX2NvbmZpZ192aWRlbyhkcCkpCisJCXJl dHVybjsKKworCWlmIChjZG5fZHBfc2V0X3ZpZGVvX3N0YXR1cyhkcCwgQ09OVFJPTF9WSURFT19W QUxJRCkpCisJCXJldHVybjsKKworCWRwLT5kcG1zX21vZGUgPSBEUk1fTU9ERV9EUE1TX09OOwor fQorCitzdGF0aWMgdm9pZCBjZG5fZHBfZW5jb2Rlcl9tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29k ZXIgKmVuY29kZXIsCisJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJ CSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWQpCit7CisJc3RydWN0IGNkbl9k cF9kZXZpY2UgKmRwID0gZW5jb2Rlcl90b19kcChlbmNvZGVyKTsKKwlzdHJ1Y3QgZHJtX2Rpc3Bs YXlfaW5mbyAqZGlzcGxheV9pbmZvID0gJmRwLT5jb25uZWN0b3IuZGlzcGxheV9pbmZvOworCXN0 cnVjdCByb2NrY2hpcF9jcnRjX3N0YXRlICpzdGF0ZTsKKwlzdHJ1Y3QgdmlkZW9faW5mbyAqdmlk ZW8gPSAmZHAtPnZpZGVvX2luZm87CisJaW50IHJldCwgdmFsOworCisJc3dpdGNoIChkaXNwbGF5 X2luZm8tPmJwYykgeworCWNhc2UgMTY6CisJY2FzZSAxMjoKKwljYXNlIDEwOgorCQl2aWRlby0+ Y29sb3JfZGVwdGggPSAxMDsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQl2aWRlby0+Y29sb3JfZGVw dGggPSA2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2aWRlby0+Y29sb3JfZGVwdGggPSA4Owor CQlicmVhazsKKwl9CisKKwl2aWRlby0+Y29sb3JfZm10ID0gUFhMX1JHQjsKKworCXZpZGVvLT52 X3N5bmNfcG9sYXJpdHkgPSAhIShtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTlZTWU5DKTsK Kwl2aWRlby0+aF9zeW5jX3BvbGFyaXR5ID0gISEobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFH X05IU1lOQyk7CisKKwlyZXQgPSBkcm1fb2ZfZW5jb2Rlcl9hY3RpdmVfZW5kcG9pbnRfaWQoZHAt PmRldi0+b2Zfbm9kZSwgZW5jb2Rlcik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkcC0+ ZGV2LCAiQ291bGQgbm90IGdldCB2b3AgaWQsICVkIiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKwor CWRldl9kYmcoZHAtPmRldiwgInZvcCAlcyBvdXRwdXQgdG8gY2RuLWRwXG4iLCAocmV0KSA/ICJM SVQiIDogIkJJRyIpOworCXN0YXRlID0gdG9fcm9ja2NoaXBfY3J0Y19zdGF0ZShlbmNvZGVyLT5j cnRjLT5zdGF0ZSk7CisJaWYgKHJldCkgeworCQl2YWwgPSBEUF9TRUxfVk9QX0xJVCB8IChEUF9T RUxfVk9QX0xJVCA8PCAxNik7CisJCXN0YXRlLT5vdXRwdXRfbW9kZSA9IFJPQ0tDSElQX09VVF9N T0RFX1A4ODg7CisJfSBlbHNlIHsKKwkJdmFsID0gRFBfU0VMX1ZPUF9MSVQgPDwgMTY7CisJCXN0 YXRlLT5vdXRwdXRfbW9kZSA9IFJPQ0tDSElQX09VVF9NT0RFX0FBQUE7CisJfQorCisJcmV0ID0g Y2RuX2RwX2dyZl93cml0ZShkcCwgR1JGX1NPQ19DT045LCB2YWwpOworCWlmIChyZXQpCisJCXJl dHVybjsKKworCW1lbWNweSgmZHAtPm1vZGUsIGFkanVzdGVkLCBzaXplb2YoKm1vZGUpKTsKK30K Kworc3RhdGljIHZvaWQgY2RuX2RwX2VuY29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAq ZW5jb2RlcikKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBlbmNvZGVyX3RvX2RwKGVu Y29kZXIpOworCisJaWYgKGRwLT5kcG1zX21vZGUgIT0gRFJNX01PREVfRFBNU19PTikKKwkJY2Ru X2RwX2NvbW1pdChlbmNvZGVyKTsKK30KKworc3RhdGljIHZvaWQgY2RuX2RwX2VuY29kZXJfZGlz YWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGNkbl9kcF9kZXZp Y2UgKmRwID0gZW5jb2Rlcl90b19kcChlbmNvZGVyKTsKKworCWRwLT5kcG1zX21vZGUgPSBEUk1f TU9ERV9EUE1TX09GRjsKK30KKworc3RhdGljIGludCBjZG5fZHBfZW5jb2Rlcl9hdG9taWNfY2hl Y2soc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkJICAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0 YXRlICpjb25uX3N0YXRlKQoreworCXN0cnVjdCByb2NrY2hpcF9jcnRjX3N0YXRlICpzID0gdG9f cm9ja2NoaXBfY3J0Y19zdGF0ZShjcnRjX3N0YXRlKTsKKworCXMtPm91dHB1dF9tb2RlID0gUk9D S0NISVBfT1VUX01PREVfQUFBQTsKKwlzLT5vdXRwdXRfdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RP Ul9EaXNwbGF5UG9ydDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRybV9lbmNv ZGVyX2hlbHBlcl9mdW5jcyBjZG5fZHBfZW5jb2Rlcl9oZWxwZXJfZnVuY3MgPSB7CisJLm1vZGVf c2V0ID0gY2RuX2RwX2VuY29kZXJfbW9kZV9zZXQsCisJLmVuYWJsZSA9IGNkbl9kcF9lbmNvZGVy X2VuYWJsZSwKKwkuZGlzYWJsZSA9IGNkbl9kcF9lbmNvZGVyX2Rpc2FibGUsCisJLmF0b21pY19j aGVjayA9IGNkbl9kcF9lbmNvZGVyX2F0b21pY19jaGVjaywKK307CisKK3N0YXRpYyBzdHJ1Y3Qg ZHJtX2VuY29kZXJfZnVuY3MgY2RuX2RwX2VuY29kZXJfZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSBk cm1fZW5jb2Rlcl9jbGVhbnVwLAorfTsKKworc3RhdGljIGludCBjZG5fZHBfZmlybXdhcmVfaW5p dChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJaW50IHJldDsKKwljb25zdCB1MzIgKmly YW1fZGF0YSwgKmRyYW1fZGF0YTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gZHAtPmZ3 OworCWNvbnN0IHN0cnVjdCBjZG5fZmlybXdhcmVfaGVhZGVyICpoZHI7CisKKwloZHIgPSAoc3Ry dWN0IGNkbl9maXJtd2FyZV9oZWFkZXIgKilmdy0+ZGF0YTsKKwlpZiAoZnctPnNpemUgIT0gbGUz Ml90b19jcHUoaGRyLT5zaXplX2J5dGVzKSkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJmaXJtd2Fy ZSBpcyBpbnZhbGlkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaXJhbV9kYXRhID0g KGNvbnN0IHUzMiAqKShmdy0+ZGF0YSArIGhkci0+aGVhZGVyX3NpemUpOworCWRyYW1fZGF0YSA9 IChjb25zdCB1MzIgKikoZnctPmRhdGEgKyBoZHItPmhlYWRlcl9zaXplICsgaGRyLT5pcmFtX3Np emUpOworCisJcmV0ID0gY2RuX2RwX2xvYWRfZmlybXdhcmUoZHAsIGlyYW1fZGF0YSwgaGRyLT5p cmFtX3NpemUsCisJCQkJICAgZHJhbV9kYXRhLCBoZHItPmRyYW1fc2l6ZSk7CisJaWYgKHJldCkK KwkJcmV0dXJuIHJldDsKKworCXJldCA9IGNkbl9kcF9zZXRfZmlybXdhcmVfYWN0aXZlKGRwLCB0 cnVlKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZHAtPmRldiwgImFjdGl2ZSB1Y3B1IGZhaWxl ZDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIGNkbl9kcF9ldmVu dF9jb25maWcoZHApOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9wYXJzZV9kdChzdHJ1Y3QgY2Ru X2RwX2RldmljZSAqZHApCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZHAtPmRldjsKKwlzdHJ1 Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJl czsKKworCWRwLT5ncmYgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG5wLCAicm9j a2NoaXAsZ3JmIik7CisJaWYgKElTX0VSUihkcC0+Z3JmKSkgeworCQlkZXZfZXJyKGRldiwgImNk bi1kcCBuZWVkcyByb2NrY2hpcCxncmYgcHJvcGVydHlcbiIpOworCQlyZXR1cm4gUFRSX0VSUihk cC0+Z3JmKTsKKwl9CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNP VVJDRV9NRU0sIDApOworCWRwLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVz KTsKKwlpZiAoSVNfRVJSKGRwLT5yZWdzKSkgeworCQlkZXZfZXJyKGRldiwgImlvcmVtYXAgcmVn IGZhaWxlZFxuIik7CisJCXJldHVybiBQVFJfRVJSKGRwLT5yZWdzKTsKKwl9CisKKwlkcC0+Y29y ZV9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiY29yZS1jbGsiKTsKKwlpZiAoSVNfRVJSKGRwLT5j b3JlX2NsaykpIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgZ2V0IGNvcmVfY2xrX2RwXG4iKTsK KwkJcmV0dXJuIFBUUl9FUlIoZHAtPmNvcmVfY2xrKTsKKwl9CisKKwlkcC0+cGNsayA9IGRldm1f Y2xrX2dldChkZXYsICJwY2xrIik7CisJaWYgKElTX0VSUihkcC0+cGNsaykpIHsKKwkJZGV2X2Vy cihkZXYsICJjYW5ub3QgZ2V0IHBjbGtcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkcC0+cGNsayk7 CisJfQorCisJZHAtPnNwZGlmX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJzcGRpZiIpOworCWlm IChJU19FUlIoZHAtPnNwZGlmX2NsaykpIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgZ2V0IHNw ZGlmX2Nsa1xuIik7CisJCXJldHVybiBQVFJfRVJSKGRwLT5zcGRpZl9jbGspOworCX0KKworCWRw LT5ncmZfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImdyZiIpOworCWlmIChJU19FUlIoZHAtPmdy Zl9jbGspKSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IGdldCBncmYgY2xrXG4iKTsKKwkJcmV0 dXJuIFBUUl9FUlIoZHAtPmdyZl9jbGspOworCX0KKworCWRwLT5zcGRpZl9yc3QgPSBkZXZtX3Jl c2V0X2NvbnRyb2xfZ2V0KGRldiwgInNwZGlmIik7CisJaWYgKElTX0VSUihkcC0+c3BkaWZfcnN0 KSkgeworCQlkZXZfZXJyKGRldiwgIm5vIHNwZGlmIHJlc2V0IGNvbnRyb2wgZm91bmRcbiIpOwor CQlyZXR1cm4gUFRSX0VSUihkcC0+c3BkaWZfcnN0KTsKKwl9CisKKwlkcC0+ZHB0eF9yc3QgPSBk ZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0KGRldiwgImRwdHgiKTsKKwlpZiAoSVNfRVJSKGRwLT5kcHR4 X3JzdCkpIHsKKwkJZGV2X2VycihkZXYsICJubyB1cGh5IHJlc2V0IGNvbnRyb2wgZm91bmRcbiIp OworCQlyZXR1cm4gUFRSX0VSUihkcC0+ZHB0eF9yc3QpOworCX0KKworCWRwLT5hcGJfcnN0ID0g ZGV2bV9yZXNldF9jb250cm9sX2dldChkZXYsICJhcGIiKTsKKwlpZiAoSVNfRVJSKGRwLT5hcGJf cnN0KSkgeworCQlkZXZfZXJyKGRldiwgIm5vIGFwYiByZXNldCBjb250cm9sIGZvdW5kXG4iKTsK KwkJcmV0dXJuIFBUUl9FUlIoZHAtPmFwYl9yc3QpOworCX0KKworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IGNkbl9kcF9hdWRpb19od19wYXJhbXMoc3RydWN0IGRldmljZSAqZGV2LCAgdm9p ZCAqZGF0YSwKKwkJCQkgIHN0cnVjdCBoZG1pX2NvZGVjX2RhaWZtdCAqZGFpZm10LAorCQkJCSAg c3RydWN0IGhkbWlfY29kZWNfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGNkbl9kcF9kZXZp Y2UgKmRwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGF1ZGlvX2luZm8gYXVkaW8g PSB7CisJCS5zYW1wbGVfd2lkdGggPSBwYXJhbXMtPnNhbXBsZV93aWR0aCwKKwkJLnNhbXBsZV9y YXRlID0gcGFyYW1zLT5zYW1wbGVfcmF0ZSwKKwkJLmNoYW5uZWxzID0gcGFyYW1zLT5jaGFubmVs cywKKwl9OworCWludCByZXQ7CisKKwlpZiAoIWRwLT5lbmNvZGVyLmNydGMpCisJCXJldHVybiAt RU5PREVWOworCisJc3dpdGNoIChkYWlmbXQtPmZtdCkgeworCWNhc2UgSERNSV9JMlM6CisJCWF1 ZGlvLmZvcm1hdCA9IEFGTVRfSTJTOworCQlicmVhazsKKwljYXNlIEhETUlfU1BESUY6CisJCWF1 ZGlvLmZvcm1hdCA9IEFGTVRfU1BESUY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIo ZGV2LCAiJXM6IEludmFsaWQgZm9ybWF0ICVkXG4iLCBfX2Z1bmNfXywgZGFpZm10LT5mbXQpOwor CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBjZG5fZHBfYXVkaW9fY29uZmlnKGRwLCAm YXVkaW8pOworCWlmICghcmV0KQorCQlkcC0+YXVkaW9faW5mbyA9IGF1ZGlvOworCisJcmV0dXJu IHJldDsKK30KKworc3RhdGljIHZvaWQgY2RuX2RwX2F1ZGlvX3NodXRkb3duKHN0cnVjdCBkZXZp Y2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBkZXZf Z2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0OworCisJaWYgKCFkcC0+ZW5jb2Rlci5jcnRjKQor CQlyZXR1cm47CisKKwlyZXQgPSBjZG5fZHBfYXVkaW9fc3RvcChkcCwgJmRwLT5hdWRpb19pbmZv KTsKKwlpZiAoIXJldCkKKwkJZHAtPmF1ZGlvX2luZm8uZm9ybWF0ID0gQUZNVF9VTlVTRUQ7Cit9 CisKK3N0YXRpYyBpbnQgY2RuX2RwX2F1ZGlvX2RpZ2l0YWxfbXV0ZShzdHJ1Y3QgZGV2aWNlICpk ZXYsIHZvaWQgKmRhdGEsCisJCQkJICAgICBib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgY2RuX2Rw X2RldmljZSAqZHAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmICghZHAtPmVuY29kZXIu Y3J0YykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gY2RuX2RwX2F1ZGlvX211dGUoZHAs IGVuYWJsZSk7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX2F1ZGlvX2dldF9lbGQoc3RydWN0IGRl dmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJCXU4ICpidWYsIHNpemVfdCBsZW4pCit7CisJc3Ry dWN0IGNkbl9kcF9kZXZpY2UgKmRwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRy bV9tb2RlX2NvbmZpZyAqY29uZmlnID0gJmRwLT5lbmNvZGVyLmRldi0+bW9kZV9jb25maWc7CisJ c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlpbnQgcmV0ID0gLUVOT0RFVjsKKwor CW11dGV4X2xvY2soJmNvbmZpZy0+bXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVj dG9yLCAmY29uZmlnLT5jb25uZWN0b3JfbGlzdCwgaGVhZCkgeworCQlpZiAoJmRwLT5lbmNvZGVy ID09IGNvbm5lY3Rvci0+ZW5jb2RlcikgeworCQkJbWVtY3B5KGJ1ZiwgY29ubmVjdG9yLT5lbGQs CisJCQkgICAgICAgbWluKHNpemVvZihjb25uZWN0b3ItPmVsZCksIGxlbikpOworCQkJcmV0ID0g MDsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmNvbmZpZy0+bXV0ZXgpOworCisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoZG1pX2NvZGVjX29wcyBhdWRpb19jb2RlY19v cHMgPSB7CisJLmh3X3BhcmFtcyA9IGNkbl9kcF9hdWRpb19od19wYXJhbXMsCisJLmF1ZGlvX3No dXRkb3duID0gY2RuX2RwX2F1ZGlvX3NodXRkb3duLAorCS5kaWdpdGFsX211dGUgPSBjZG5fZHBf YXVkaW9fZGlnaXRhbF9tdXRlLAorCS5nZXRfZWxkID0gY2RuX2RwX2F1ZGlvX2dldF9lbGQsCit9 OworCitzdGF0aWMgaW50IGNkbl9kcF9hdWRpb19jb2RlY19pbml0KHN0cnVjdCBjZG5fZHBfZGV2 aWNlICpkcCwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGhkbWlfY29k ZWNfcGRhdGEgY29kZWNfZGF0YSA9IHsKKwkJLmkycyA9IDEsCisJCS5zcGRpZiA9IDEsCisJCS5v cHMgPSAmYXVkaW9fY29kZWNfb3BzLAorCQkubWF4X2kyc19jaGFubmVscyA9IDgsCisJfTsKKwor CWRwLT5hdWRpb19wZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2RhdGEoCisJCQkgZGV2 LCBIRE1JX0NPREVDX0RSVl9OQU1FLCBQTEFURk9STV9ERVZJRF9BVVRPLAorCQkJICZjb2RlY19k YXRhLCBzaXplb2YoY29kZWNfZGF0YSkpOworCisJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhkcC0+ YXVkaW9fcGRldik7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX2dldF9jYXBfbGFuZXMoc3RydWN0 IGNkbl9kcF9kZXZpY2UgKmRwLAorCQkJCXN0cnVjdCBleHRjb25fZGV2ICplZGV2KQoreworCXVu aW9uIGV4dGNvbl9wcm9wZXJ0eV92YWx1ZSBwcm9wZXJ0eTsKKwlib29sIGRwdHg7CisJdTggbGFu ZXM7CisKKwlpZiAoZHAtPnN1c3BlbmQpCisJCXJldHVybiAwOworCisJZHB0eCA9IGV4dGNvbl9n ZXRfc3RhdGUoZWRldiwgRVhUQ09OX0RJU1BfRFApOworCisJaWYgKGRwdHgpIHsKKwkJZXh0Y29u X2dldF9wcm9wZXJ0eShlZGV2LCBFWFRDT05fRElTUF9EUCwKKwkJCQkgICAgRVhUQ09OX1BST1Bf VVNCX1NTLCAmcHJvcGVydHkpOworCQlpZiAocHJvcGVydHkuaW50dmFsKQorCQkJbGFuZXMgPSAy OworCQllbHNlCisJCQlsYW5lcyA9IDQ7CisJfSBlbHNlIHsKKwkJbGFuZXMgPSAwOworCX0KKwor CXJldHVybiBsYW5lczsKK30KKworc3RhdGljIGludCBjZG5fZHBfZ2V0X2RwY2Qoc3RydWN0IGNk bl9kcF9kZXZpY2UgKmRwLCBzdHJ1Y3QgY2RuX2RwX3BvcnQgKnBvcnQpCit7CisJdTggc2lua19j b3VudDsKKwlpbnQgaSwgcmV0OworCisJLyoKKwkgKiBOYXRpdmUgcmVhZCB3aXRoIHJldHJ5IGZv ciBsaW5rIHN0YXR1cyBhbmQgcmVjZWl2ZXIgY2FwYWJpbGl0eSByZWFkcworCSAqIGZvciBjYXNl cyB3aGVyZSB0aGUgc2luayBtYXkgc3RpbGwgbm90IGJlIHJlYWR5LgorCSAqCisJICogU2lua3Mg YXJlICpzdXBwb3NlZCogdG8gY29tZSB1cCB3aXRoaW4gMW1zIGZyb20gYW4gb2ZmIHN0YXRlLCBi dXQKKwkgKiBzb21lIERPQ0tzIG5lZWQgYWJvdXQgNSBzZWNvbmRzIHRvIHBvd2VyIHVwLCBzbyBy ZWFkIHRoZSBkcGNkIGV2ZXJ5CisJICogMTAwbXMsIGlmIGNhbiBub3QgZ2V0IGEgZ29vZCBkcGNk IGluIDEwIHNlY29uZHMsIGdpdmUgdXAuCisJICovCisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsr KSB7CisJCXJldCA9IGNkbl9kcF9kcGNkX3JlYWQoZHAsIERQX1NJTktfQ09VTlQsCisJCQkJICAg ICAgICZzaW5rX2NvdW50LCAxKTsKKwkJaWYgKCFyZXQpIHsKKwkJCWRldl9kYmcoZHAtPmRldiwg ImdldCBkcGNkIHN1Y2Nlc3MhXG4iKTsKKworCQkJc2lua19jb3VudCA9IERQX0dFVF9TSU5LX0NP VU5UKHNpbmtfY291bnQpOworCQkJaWYgKCFzaW5rX2NvdW50KQorCQkJCXJldHVybiAtRU5PREVW OworCisJCQlyZXQgPSBjZG5fZHBfZHBjZF9yZWFkKGRwLCAweDAwMCwgZHAtPmRwY2QsCisJCQkJ CSAgICAgICBEUF9SRUNFSVZFUl9DQVBfU0laRSk7CisJCQlpZiAocmV0KQorCQkJCWNvbnRpbnVl OworCisJCQlyZXR1cm4gcmV0OworCQl9IGVsc2UgaWYgKCFleHRjb25fZ2V0X3N0YXRlKHBvcnQt PmV4dGNvbiwgRVhUQ09OX0RJU1BfRFApKSB7CisJCQlicmVhazsKKwkJfQorCisJCW1zbGVlcCgx MDApOworCX0KKworCWRldl9lcnIoZHAtPmRldiwgImdldCBkcGNkIGZhaWxlZCFcbiIpOworCisJ cmV0dXJuIC1FVElNRURPVVQ7Cit9CisKK3N0YXRpYyB2b2lkIGNkbl9kcF9lbnRlcl9zdGFuZHko c3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLAorCQkJCXN0cnVjdCBjZG5fZHBfcG9ydCAqcG9ydCkK K3sKKwlpbnQgaSwgcmV0OworCisJcmV0ID0gcGh5X3Bvd2VyX29mZihwb3J0LT5waHkpOworCWlm IChyZXQpIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAicGh5IHBvd2VyIG9mZiBmYWlsZWQ6ICVkIiwg cmV0KTsKKwkJcmV0dXJuOworCX0KKworCXBvcnQtPnBoeV9zdGF0dXMgPSBmYWxzZTsKKwlwb3J0 LT5jYXBfbGFuZXMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBkcC0+cG9ydHM7IGkrKykgeworCQlp ZiAoZHAtPnBvcnRbaV0tPnBoeV9zdGF0dXMpCisJCQlyZXR1cm47CisJfQorCisJcmV0ID0gY2Ru X2RwX2dyZl93cml0ZShkcCwgR1JGX1NPQ19DT04yNiwKKwkJCSAgICAgICBEUFRYX0hQRF9TRUxf TUFTSyB8IERQVFhfSFBEX0RFTCk7CisJaWYgKHJldCkKKwkJcmV0dXJuOworCisJbWVtc2V0KGRw LT5kcGNkLCAwLCBEUF9SRUNFSVZFUl9DQVBfU0laRSk7CisJZHAtPmhwZF9zdGF0dXMgPSBjb25u ZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKwlkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQoZHAt PmRybV9kZXYpOworCWNkbl9kcF9zZXRfZmlybXdhcmVfYWN0aXZlKGRwLCBmYWxzZSk7CisKKwlj ZG5fZHBfY2xrX2Rpc2FibGUoZHApOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9zdGFydF93b3Jr KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwKKwkJCSAgICAgc3RydWN0IGNkbl9kcF9wb3J0ICpw b3J0LAorCQkJICAgICB1OCBjYXBfbGFuZXMpCit7CisJdW5pb24gZXh0Y29uX3Byb3BlcnR5X3Zh bHVlIHByb3BlcnR5OworCWludCByZXQ7CisKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZkcC0+ ZncsIENETl9EUF9GSVJNV0FSRSwgZHAtPmRldik7CisJaWYgKHJldCkgeworCQlpZiAocmV0ID09 IC1FTk9FTlQgJiYgZHAtPmZ3X3dhaXQgPD0gTUFYX0ZXX1dBSVRfU0VDUykgeworCQkJdW5zaWdu ZWQgbG9uZyB0aW1lID0gbXNlY3NfdG9famlmZmllcyhkcC0+Zndfd2FpdCAqIEhaKTsKKworCQkJ LyoKKwkJCSAqIElmIGNhbiBub3QgZmluZCB0aGUgZmlsZSwgcmV0cnkgdG8gbG9hZCB0aGUgZmly bXdhcmUKKwkJCSAqIGluIHNldmVyYWwgc2Vjb25kcywgaWYgc3RpbGwgZmFpbGVkIGFmdGVyIDEg bWludXRlLAorCQkJICogZ2l2ZSB1cC4KKwkJCSAqLworCQkJc2NoZWR1bGVfZGVsYXllZF93b3Jr KCZwb3J0LT5ldmVudF93cSwgdGltZSk7CisJCQlkcC0+Zndfd2FpdCAqPSAyOworCQl9IGVsc2Ug eworCQkJZGV2X2VycihkcC0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgZmlybXdhcmU6ICVkXG4i LAorCQkJCXJldCk7CisJCX0KKworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGNkbl9kcF9j bGtfZW5hYmxlKGRwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gY2RuX2Rw X2dyZl93cml0ZShkcCwgR1JGX1NPQ19DT04yNiwKKwkJCSAgICAgICAocG9ydC0+aWQgPDwgVVBI WV9TRUxfQklUKSB8IFVQSFlfU0VMX01BU0spOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3BoeTsK KworCXJldCA9IHBoeV9wb3dlcl9vbihwb3J0LT5waHkpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vy cihkcC0+ZGV2LCAicGh5IHBvd2VyIG9uIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJy X3BoeTsKKwl9CisKKwlwb3J0LT5waHlfc3RhdHVzID0gdHJ1ZTsKKworCXJldCA9IGNkbl9kcF9m aXJtd2FyZV9pbml0KGRwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZHAtPmRldiwgImZpcm13 YXJlIGluaXQgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gZXJyX2Zpcm13YXJlOworCX0KKwor CXJldCA9IGNkbl9kcF9ncmZfd3JpdGUoZHAsIEdSRl9TT0NfQ09OMjYsCisJCQkgICAgICAgRFBU WF9IUERfU0VMX01BU0sgfCBEUFRYX0hQRF9TRUwpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2dy ZjsKKworCXJldCA9IGNkbl9kcF9nZXRfaHBkX3N0YXR1cyhkcCk7CisJaWYgKHJldCA8PSAwKSB7 CisJCWlmICghcmV0KQorCQkJZGV2X2VycihkcC0+ZGV2LCAiaHBkIGRvZXMgbm90IGV4aXN0XG4i KTsKKwkJZ290byBlcnJfaHBkOworCX0KKworCXJldCA9IGV4dGNvbl9nZXRfcHJvcGVydHkocG9y dC0+ZXh0Y29uLCBFWFRDT05fRElTUF9EUCwKKwkJCQkgIEVYVENPTl9QUk9QX1VTQl9UWVBFQ19Q T0xBUklUWSwgJnByb3BlcnR5KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZHAtPmRldiwgImdl dCBwcm9wZXJ0eSBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9ocGQ7CisJfQorCisJcmV0ID0gY2Ru X2RwX3NldF9ob3N0X2NhcChkcCwgY2FwX2xhbmVzLCBwcm9wZXJ0eS5pbnR2YWwpOworCWlmIChy ZXQpIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAic2V0IGhvc3QgY2FwYWJpbGl0aWVzIGZhaWxlZDog JWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2hwZDsKKwl9CisKKwlyZXQgPSBjZG5fZHBfZ2V0X2Rw Y2QoZHAsIHBvcnQpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2hwZDsKKworCXJlbGVhc2VfZmly bXdhcmUoZHAtPmZ3KTsKKwlyZXR1cm4gMDsKKworZXJyX2hwZDoKKwljZG5fZHBfZ3JmX3dyaXRl KGRwLCBHUkZfU09DX0NPTjI2LAorCQkJIERQVFhfSFBEX1NFTF9NQVNLIHwgRFBUWF9IUERfREVM KTsKKworZXJyX2dyZjoKKwljZG5fZHBfc2V0X2Zpcm13YXJlX2FjdGl2ZShkcCwgZmFsc2UpOwor CitlcnJfZmlybXdhcmU6CisJaWYgKHBoeV9wb3dlcl9vZmYocG9ydC0+cGh5KSkKKwkJZGV2X2Vy cihkcC0+ZGV2LCAicGh5IHBvd2VyIG9mZiBmYWlsZWQ6ICVkIiwgcmV0KTsKKwllbHNlCisJCXBv cnQtPnBoeV9zdGF0dXMgPSBmYWxzZTsKKworZXJyX3BoeToKKwljZG5fZHBfY2xrX2Rpc2FibGUo ZHApOworCXJlbGVhc2VfZmlybXdhcmUoZHAtPmZ3KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0 aWMgdm9pZCBjZG5fZHBfcGRfZXZlbnRfd3Eoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorewor CXN0cnVjdCBjZG5fZHBfcG9ydCAqcG9ydCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2Ru X2RwX3BvcnQsCisJCQkJCQlldmVudF93cS53b3JrKTsKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAq ZHAgPSBwb3J0LT5kcDsKKwl1OCBuZXdfY2FwX2xhbmVzLCBzaW5rX2NvdW50LCBpOworCWludCBy ZXQ7CisKKwluZXdfY2FwX2xhbmVzID0gY2RuX2RwX2dldF9jYXBfbGFuZXMoZHAsIHBvcnQtPmV4 dGNvbik7CisKKwlpZiAobmV3X2NhcF9sYW5lcyA9PSBwb3J0LT5jYXBfbGFuZXMpIHsKKwkJaWYg KCFuZXdfY2FwX2xhbmVzKQorCQkJcmV0dXJuOworCQkvKgorCQkgKiBJZiBIUEQgaW50ZXJydXB0 IGlzIHRyaWdnZXJlZCwgYW5kIGNhYmxlIHN0YXRlcyBpcyBzdGlsbAorCQkgKiBhdHRhY2hlZCwg dGhhdCBtZWFucyBzb21ldGhpbmcgb24gdGhlIFR5cGUtQyBEb2NrL0RvbmdsZQorCQkgKiBjaGFu Z2VkLCBjaGVjayB0aGUgc2luayBjb3VudCBieSBEUENELiBJZiBzaW5rIGNvdW50IGJlY29tZQor CQkgKiAwLCB0aGlzIHBvcnQgcGh5IGNvdWxkIGJlIHBvd2VyIG9mZjsgSWYgc2luayBjb3VudCBk b2VzIG5vdAorCQkgKiBjaGFuZ2UsIGl0IG1lYW5zIHRoZSBzaW5rIGRldmljZSBzdGF0dXMgaGFz IHVwZGF0ZSwKKwkJICogcmUtdHJhaW5pbmcgdG8gbWFrZSBpdCB3b3JrcyBhZ2Fpbi4KKwkJICov CisJCXJldCA9IGNkbl9kcF9kcGNkX3JlYWQoZHAsIERQX1NJTktfQ09VTlQsICZzaW5rX2NvdW50 LCAxKTsKKwkJaWYgKHJldCB8fCBzaW5rX2NvdW50KSB7CisJCQlpZiAoZHAtPmRwbXNfbW9kZSA9 PSBEUk1fTU9ERV9EUE1TX09OKSB7CisJCQkJcmV0ID0gY2RuX2RwX3RyYWluaW5nX3N0YXJ0KGRw KTsKKwkJCQlpZiAoIXJldCkKKwkJCQkJY2RuX2RwX2dldF90cmFpbmluZ19zdGF0dXMoZHApOwor CQkJfQorCQkJcmV0dXJuOworCQl9CisKKwkJbmV3X2NhcF9sYW5lcyA9IDA7CisJfQorCisJaWYg KCFuZXdfY2FwX2xhbmVzKQorCQlyZXR1cm4gY2RuX2RwX2VudGVyX3N0YW5keShkcCwgcG9ydCk7 CisKKwkvKiBpZiBvdGhlciBwaHkgaXMgcnVubmluZywgZG8gbm90IGRvIGFueXRoaW5nLCBqdXN0 IHJldHVybiAqLworCWZvciAoaSA9IDA7IGkgPCBkcC0+cG9ydHM7IGkrKykgeworCQlpZiAoZHAt PnBvcnRbaV0tPnBoeV9zdGF0dXMpIHsKKwkJCWRldl93YXJuKGRwLT5kZXYsICJidXN5LCBwaHlb JWRdIGlzIHJ1bm5pbmciLAorCQkJCSBkcC0+cG9ydFtpXS0+aWQpOworCQkJcmV0dXJuOworCQl9 CisJfQorCisJcmV0ID0gY2RuX2RwX3N0YXJ0X3dvcmsoZHAsIHBvcnQsIG5ld19jYXBfbGFuZXMp OworCWlmIChyZXQpCisJCXJldHVybjsKKworCXBvcnQtPmNhcF9sYW5lcyA9IG5ld19jYXBfbGFu ZXM7CisJZHAtPmhwZF9zdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwlkcm1f aGVscGVyX2hwZF9pcnFfZXZlbnQoZHAtPmRybV9kZXYpOworfQorCitzdGF0aWMgaW50IGNkbl9k cF9wZF9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJICAgdW5zaWduZWQgbG9u ZyBldmVudCwgdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3QgY2RuX2RwX3BvcnQgKnBvcnQ7CisKKwlw b3J0ID0gY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgY2RuX2RwX3BvcnQsIGV2ZW50X25iKTsKKwor CXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcG9ydC0+ZXZlbnRfd3EsIDApOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qg ZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwor CXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IGNkbl9kcF9wb3J0ICpw b3J0OworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZGF0YTsKKwlpbnQgcmV0LCBpOwor CisJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKKworCXJldCA9IGNkbl9kcF9wYXJzZV9kdChkcCk7 CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlkcC0+ZHJtX2RldiA9IGRybV9kZXY7 CisJZHAtPmhwZF9zdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKwlkcC0+ ZHBtc19tb2RlID0gRFJNX01PREVfRFBNU19PRkY7CisJZHAtPmZ3X3dhaXQgPSAxOworCisJZW5j b2RlciA9ICZkcC0+ZW5jb2RlcjsKKworCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gZHJtX29m X2ZpbmRfcG9zc2libGVfY3J0Y3MoZHJtX2RldiwKKwkJCQkJCQkgICAgIGRldi0+b2Zfbm9kZSk7 CisJRFJNX0RFQlVHX0tNUygicG9zc2libGVfY3J0Y3MgPSAweCV4XG4iLCBlbmNvZGVyLT5wb3Nz aWJsZV9jcnRjcyk7CisKKwlyZXQgPSBkcm1fZW5jb2Rlcl9pbml0KGRybV9kZXYsIGVuY29kZXIs ICZjZG5fZHBfZW5jb2Rlcl9mdW5jcywKKwkJCSAgICAgICBEUk1fTU9ERV9FTkNPREVSX1RNRFMs IE5VTEwpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBl bmNvZGVyIHdpdGggZHJtXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkcm1fZW5jb2Rlcl9o ZWxwZXJfYWRkKGVuY29kZXIsICZjZG5fZHBfZW5jb2Rlcl9oZWxwZXJfZnVuY3MpOworCisJY29u bmVjdG9yID0gJmRwLT5jb25uZWN0b3I7CisJY29ubmVjdG9yLT5wb2xsZWQgPSBEUk1fQ09OTkVD VE9SX1BPTExfSFBEOworCWNvbm5lY3Rvci0+ZHBtcyA9IERSTV9NT0RFX0RQTVNfT0ZGOworCisJ cmV0ID0gZHJtX2Nvbm5lY3Rvcl9pbml0KGRybV9kZXYsIGNvbm5lY3RvciwKKwkJCQkgJmNkbl9k cF9hdG9taWNfY29ubmVjdG9yX2Z1bmNzLAorCQkJCSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxh eVBvcnQpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBj b25uZWN0b3Igd2l0aCBkcm1cbiIpOworCQlnb3RvIGVycl9mcmVlX2VuY29kZXI7CisJfQorCisJ ZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwgJmNkbl9kcF9jb25uZWN0b3JfaGVs cGVyX2Z1bmNzKTsKKworCXJldCA9IGRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihj b25uZWN0b3IsIGVuY29kZXIpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8g YXR0YWNoIGNvbm5lY3RvciBhbmQgZW5jb2RlclxuIik7CisJCWdvdG8gZXJyX2ZyZWVfY29ubmVj dG9yOworCX0KKworCWNkbl9kcF9hdWRpb19jb2RlY19pbml0KGRwLCBkZXYpOworCisJZm9yIChp ID0gMDsgaSA8IGRwLT5wb3J0czsgaSsrKSB7CisJCXBvcnQgPSBkcC0+cG9ydFtpXTsKKworCQlw b3J0LT5ldmVudF9uYi5ub3RpZmllcl9jYWxsID0gY2RuX2RwX3BkX2V2ZW50OworCQlJTklUX0RF TEFZRURfV09SSygmcG9ydC0+ZXZlbnRfd3EsIGNkbl9kcF9wZF9ldmVudF93cSk7CisJCXJldCA9 IGV4dGNvbl9yZWdpc3Rlcl9ub3RpZmllcihwb3J0LT5leHRjb24sIEVYVENPTl9ESVNQX0RQLAor CQkJCQkgICAgICAgJnBvcnQtPmV2ZW50X25iKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2Vycihk ZXYsICJyZWdpc3RlciBFWFRDT05fRElTUF9EUCBub3RpZmllciBlcnJcbiIpOworCQkJcmV0dXJu IHJldDsKKwkJfQorCisJCWlmIChleHRjb25fZ2V0X3N0YXRlKHBvcnQtPmV4dGNvbiwgRVhUQ09O X0RJU1BfRFApKQorCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwb3J0LT5ldmVudF93cSwgMCk7 CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2Nvbm5lY3RvcjoKKwlkcm1fY29ubmVjdG9y X2NsZWFudXAoY29ubmVjdG9yKTsKK2Vycl9mcmVlX2VuY29kZXI6CisJZHJtX2VuY29kZXJfY2xl YW51cChlbmNvZGVyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBjZG5fZHBfdW5i aW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpkYXRh KQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwor CXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9ICZkcC0+ZW5jb2RlcjsKKwlzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yID0gJmRwLT5jb25uZWN0b3I7CisJc3RydWN0IGNkbl9kcF9w b3J0ICpwb3J0OworCWludCBpOworCisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZHAtPmF1 ZGlvX3BkZXYpOworCWNkbl9kcF9lbmNvZGVyX2Rpc2FibGUoZW5jb2Rlcik7CisJZW5jb2Rlci0+ ZnVuY3MtPmRlc3Ryb3koZW5jb2Rlcik7CisJY29ubmVjdG9yLT5mdW5jcy0+ZGVzdHJveShjb25u ZWN0b3IpOworCisJZm9yIChpID0gMDsgaSA8IGRwLT5wb3J0czsgaSsrKSB7CisJCXBvcnQgPSBk cC0+cG9ydFtpXTsKKwkJZXh0Y29uX3VucmVnaXN0ZXJfbm90aWZpZXIocG9ydC0+ZXh0Y29uLCBF WFRDT05fRElTUF9EUCwKKwkJCQkJICAgJnBvcnQtPmV2ZW50X25iKTsKKwl9CisKKwlwbV9ydW50 aW1lX2Rpc2FibGUoZGV2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfb3Bz IGNkbl9kcF9jb21wb25lbnRfb3BzID0geworCS5iaW5kID0gY2RuX2RwX2JpbmQsCisJLnVuYmlu ZCA9IGNkbl9kcF91bmJpbmQsCit9OworCitpbnQgY2RuX2RwX3N1c3BlbmQoc3RydWN0IGRldmlj ZSAqZGV2KQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGRldl9nZXRfZHJ2ZGF0YShk ZXYpOworCXN0cnVjdCBjZG5fZHBfcG9ydCAqcG9ydDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7 IGkgPCBkcC0+cG9ydHM7IGkrKykgeworCQlwb3J0ID0gZHAtPnBvcnRbaV07CisJCWlmIChwb3J0 LT5waHlfc3RhdHVzKSB7CisJCQljZG5fZHBfZHBjZF93cml0ZShkcCwgRFBfU0VUX1BPV0VSLCBE UF9TRVRfUE9XRVJfRDMpOworCQkJZHAtPnN1c3BlbmQgPSB0cnVlOworCQkJc2NoZWR1bGVfZGVs YXllZF93b3JrKCZwb3J0LT5ldmVudF93cSwgMCk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30K KworaW50IGNkbl9kcF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBjZG5f ZHBfZGV2aWNlICpkcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBjZG5fZHBfcG9y dCAqcG9ydDsKKwlpbnQgaTsKKworCWlmIChkcC0+c3VzcGVuZCkgeworCQlkcC0+c3VzcGVuZCA9 IGZhbHNlOworCQlmb3IgKGkgPSAwOyBpIDwgZHAtPnBvcnRzOyBpKyspIHsKKwkJCXBvcnQgPSBk cC0+cG9ydFtpXTsKKwkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcG9ydC0+ZXZlbnRfd3EsIDAp OworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX3Byb2JlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBk ZXYtPmRldjsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKKwlzdHJ1Y3QgY2Ru X2RwX2RhdGEgKmRwX2RhdGE7CisJc3RydWN0IGNkbl9kcF9wb3J0ICpwb3J0OworCXN0cnVjdCBj ZG5fZHBfZGV2aWNlICpkcDsKKwlzdHJ1Y3QgZXh0Y29uX2RldiAqZXh0Y29uOworCXN0cnVjdCBw aHkgKnBoeTsKKwlpbnQgaTsKKworCWRwID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkcCks IEdGUF9LRVJORUwpOworCWlmICghZHApCisJCXJldHVybiAtRU5PTUVNOworCWRwLT5kZXYgPSBk ZXY7CisKKwltYXRjaCA9IG9mX21hdGNoX25vZGUoY2RuX2RwX2R0X2lkcywgcGRldi0+ZGV2Lm9m X25vZGUpOworCWRwX2RhdGEgPSAoc3RydWN0IGNkbl9kcF9kYXRhICopbWF0Y2gtPmRhdGE7CisK Kwlmb3IgKGkgPSAwOyBpIDwgZHBfZGF0YS0+bWF4X3BoeTsgaSsrKSB7CisJCWV4dGNvbiA9IGV4 dGNvbl9nZXRfZWRldl9ieV9waGFuZGxlKGRldiwgaSk7CisJCXBoeSA9IGRldm1fb2ZfcGh5X2dl dF9ieV9pbmRleChkZXYsIGRldi0+b2Zfbm9kZSwgaSk7CisKKwkJaWYgKFBUUl9FUlIoZXh0Y29u KSA9PSAtRVBST0JFX0RFRkVSIHx8CisJCSAgICBQVFJfRVJSKHBoeSkgPT0gLUVQUk9CRV9ERUZF UikKKwkJCXJldHVybiAtRVBST0JFX0RFRkVSOworCisJCWlmIChJU19FUlIoZXh0Y29uKSB8fCBJ U19FUlIocGh5KSkKKwkJCWNvbnRpbnVlOworCisJCXBvcnQgPSBkZXZtX2t6YWxsb2MoZGV2LCBz aXplb2YoKnBvcnQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFkcCkKKwkJCXJldHVybiAtRU5PTUVN OworCisJCXBvcnQtPmV4dGNvbiA9IGV4dGNvbjsKKwkJcG9ydC0+cGh5ID0gcGh5OworCQlwb3J0 LT5kcCA9IGRwOworCQlwb3J0LT5pZCA9IGk7CisJCWRwLT5wb3J0W2RwLT5wb3J0cysrXSA9IHBv cnQ7CisJfQorCisJaWYgKCFkcC0+cG9ydHMpIHsKKwkJZGV2X2VycihkZXYsICJtaXNzaW5nIGV4 dGNvbiBvciBwaHlcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkZXZfc2V0X2RydmRh dGEoZGV2LCBkcCk7CisKKwlyZXR1cm4gY29tcG9uZW50X2FkZChkZXYsICZjZG5fZHBfY29tcG9u ZW50X29wcyk7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQoreworCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRldiwgJmNkbl9kcF9jb21w b25lbnRfb3BzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9w bV9vcHMgY2RuX2RwX3BtX29wcyA9IHsKKwlTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyhjZG5fZHBf c3VzcGVuZCwKKwkJCQljZG5fZHBfcmVzdW1lKQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9y bV9kcml2ZXIgY2RuX2RwX2RyaXZlciA9IHsKKwkucHJvYmUgPSBjZG5fZHBfcHJvYmUsCisJLnJl bW92ZSA9IGNkbl9kcF9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSAiY2RuLWRw IiwKKwkJICAgLm93bmVyID0gVEhJU19NT0RVTEUsCisJCSAgIC5vZl9tYXRjaF90YWJsZSA9IG9m X21hdGNoX3B0cihjZG5fZHBfZHRfaWRzKSwKKwkJICAgLnBtID0gJmNkbl9kcF9wbV9vcHMsCisJ fSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoY2RuX2RwX2RyaXZlcik7CisKK01PRFVM RV9BVVRIT1IoIkNocmlzIFpob25nIDx6eXdAcm9jay1jaGlwcy5jb20+Iik7CitNT0RVTEVfREVT Q1JJUFRJT04oImNkbiBEUCBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtY29yZS5oIGIvZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uYWUwZGQ3YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9y b2NrY2hpcC9jZG4tZHAtY29yZS5oCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0 IChDKSAyMDE2IENocmlzIFpob25nIDx6eXdAcm9jay1jaGlwcy5jb20+CisgKiBDb3B5cmlnaHQg KEMpIDIwMTYgUk9DS0NISVAsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2Yg dGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9D RE5fRFBfQ09SRV9ICisjZGVmaW5lIF9DRE5fRFBfQ09SRV9ICisKKyNpbmNsdWRlIDxkcm0vZHJt UC5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJt X2RwX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KKyNpbmNsdWRlICJyb2Nr Y2hpcF9kcm1fZHJ2LmgiCisKKyNkZWZpbmUgTUFYX1BIWQkJMgorCitlbnVtIGF1ZGlvX2Zvcm1h dCB7CisJQUZNVF9JMlMgPSAwLAorCUFGTVRfU1BESUYgPSAxLAorCUFGTVRfVU5VU0VELAorfTsK Kworc3RydWN0IGF1ZGlvX2luZm8geworCWVudW0gYXVkaW9fZm9ybWF0IGZvcm1hdDsKKwlpbnQg c2FtcGxlX3JhdGU7CisJaW50IGNoYW5uZWxzOworCWludCBzYW1wbGVfd2lkdGg7Cit9OworCitl bnVtIHZpY19weGxfZW5jb2RpbmdfZm9ybWF0IHsKKwlQWExfUkdCID0gMHgxLAorCVlDQkNSXzRf NF80ID0gMHgyLAorCVlDQkNSXzRfMl8yID0gMHg0LAorCVlDQkNSXzRfMl8wID0gMHg4LAorCVlf T05MWSA9IDB4MTAsCit9OworCitzdHJ1Y3QgdmlkZW9faW5mbyB7CisJYm9vbCBoX3N5bmNfcG9s YXJpdHk7CisJYm9vbCB2X3N5bmNfcG9sYXJpdHk7CisJYm9vbCBpbnRlcmxhY2VkOworCWludCBj b2xvcl9kZXB0aDsKKwllbnVtIHZpY19weGxfZW5jb2RpbmdfZm9ybWF0IGNvbG9yX2ZtdDsKK307 CisKK3N0cnVjdCBjZG5fZmlybXdhcmVfaGVhZGVyIHsKKwl1MzIgc2l6ZV9ieXRlczsgLyogc2l6 ZSBvZiB0aGUgZW50aXJlIGhlYWRlcitpbWFnZShzKSBpbiBieXRlcyAqLworCXUzMiBoZWFkZXJf c2l6ZTsgLyogc2l6ZSBvZiBqdXN0IHRoZSBoZWFkZXIgaW4gYnl0ZXMgKi8KKwl1MzIgaXJhbV9z aXplOyAvKiBzaXplIG9mIGlyYW0gKi8KKwl1MzIgZHJhbV9zaXplOyAvKiBzaXplIG9mIGRyYW0g Ki8KK307CisKK3N0cnVjdCBjZG5fZHBfcG9ydCB7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw OworCXN0cnVjdCBub3RpZmllcl9ibG9jayBldmVudF9uYjsKKwlzdHJ1Y3QgZGVsYXllZF93b3Jr IGV2ZW50X3dxOworCXN0cnVjdCBleHRjb25fZGV2ICpleHRjb247CisJc3RydWN0IHBoeSAqcGh5 OworCXU4IGNhcF9sYW5lczsKKwlib29sIHBoeV9zdGF0dXM7CisJdTggaWQ7Cit9OworCitzdHJ1 Y3QgY2RuX2RwX2RldmljZSB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBkcm1fZGV2 aWNlICpkcm1fZGV2OworCXN0cnVjdCBkcm1fY29ubmVjdG9yIGNvbm5lY3RvcjsKKwlzdHJ1Y3Qg ZHJtX2VuY29kZXIgZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBtb2RlOworCXN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmF1ZGlvX3BkZXY7CisKKwljb25zdCBzdHJ1Y3QgZmlybXdh cmUgKmZ3OwkvKiBjZG4gZHAgZmlybXdhcmUgKi8KKwl1bnNpZ25lZCBpbnQgZndfdmVyc2lvbjsJ LyogY2RuIGZ3IHZlcnNpb24gKi8KKwl1MzIgZndfd2FpdDsKKwlib29sIGZ3X2FjdGl2ZWQ7CisJ dm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCByZWdtYXAgKmdyZjsKKwlzdHJ1Y3QgY2xrICpj b3JlX2NsazsKKwlzdHJ1Y3QgY2xrICpwY2xrOworCXN0cnVjdCBjbGsgKnNwZGlmX2NsazsKKwlz dHJ1Y3QgY2xrICpncmZfY2xrOworCXN0cnVjdCByZXNldF9jb250cm9sICpzcGRpZl9yc3Q7CisJ c3RydWN0IHJlc2V0X2NvbnRyb2wgKmRwdHhfcnN0OworCXN0cnVjdCByZXNldF9jb250cm9sICph cGJfcnN0OworCXN0cnVjdCBhdWRpb19pbmZvIGF1ZGlvX2luZm87CisJc3RydWN0IHZpZGVvX2lu Zm8gdmlkZW9faW5mbzsKKwlzdHJ1Y3QgZHJtX2RwX2xpbmsgbGluazsKKwlzdHJ1Y3QgY2RuX2Rw X3BvcnQgKnBvcnRbTUFYX1BIWV07CisJdTggcG9ydHM7CisKKwl1OCBkcGNkW0RQX1JFQ0VJVkVS X0NBUF9TSVpFXTsKKwllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIGhwZF9zdGF0dXM7CisJaW50 IGRwbXNfbW9kZTsKKwlib29sIHN1c3BlbmQ7CisJYm9vbCBzaW5rX2hhc19hdWRpbzsKK307Cisj ZW5kaWYgIC8qIF9DRE5fRFBfQ09SRV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v cm9ja2NoaXAvY2RuLWRwLXJlZy5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1y ZWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWE3MDJkCi0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1yZWcuYwpAQCAtMCww ICsxLDk1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgRnV6aG91IFJvY2tjaGlwIEVsZWN0cm9u aWNzIENvLkx0ZAorICogQXV0aG9yOiBDaHJpcyBaaG9uZyA8enl3QHJvY2stY2hpcHMuY29tPgor ICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0 cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4 L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8u aD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPgor CisjaW5jbHVkZSAiY2RuLWRwLWNvcmUuaCIKKyNpbmNsdWRlICJjZG4tZHAtcmVnLmgiCisKKyNk ZWZpbmUgQ0ROX0RQX1NQRElGX0NMSwkJMjAwMDAwMDAwCisjZGVmaW5lIEZXX0FMSVZFX1RJTUVP VVRfVVMJCTEwMDAwMDAKKyNkZWZpbmUgTUFJTEJPWF9SRVRSWV9VUwkJMTAwMAorI2RlZmluZSBN QUlMQk9YX1RJTUVPVVRfVVMJCTUwMDAwMDAKKyNkZWZpbmUgTElOS19UUkFJTklOR19SRVRSWV9N UwkJMjAKKyNkZWZpbmUgTElOS19UUkFJTklOR19USU1FT1VUX01TCTUwMAorCit2b2lkIGNkbl9k cF9zZXRfZndfY2xrKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgdTMyIGNsaykKK3sKKwl3cml0 ZWwoY2xrIC8gMTAwMDAwMCwgZHAtPnJlZ3MgKyBTV19DTEtfSCk7Cit9CisKK3ZvaWQgY2RuX2Rw X2Nsb2NrX3Jlc2V0KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCkKK3sKKwl1MzIgdmFsOworCisJ dmFsID0gRFBUWF9GUk1SX0RBVEFfQ0xLX1JTVE5fRU4gfAorCSAgICAgIERQVFhfRlJNUl9EQVRB X0NMS19FTiB8CisJICAgICAgRFBUWF9QSFlfREFUQV9SU1ROX0VOIHwKKwkgICAgICBEUFRYX1BI WV9EQVRBX0NMS19FTiB8CisJICAgICAgRFBUWF9QSFlfQ0hBUl9SU1ROX0VOIHwKKwkgICAgICBE UFRYX1BIWV9DSEFSX0NMS19FTiB8CisJICAgICAgU09VUkNFX0FVWF9TWVNfQ0xLX1JTVE5fRU4g fAorCSAgICAgIFNPVVJDRV9BVVhfU1lTX0NMS19FTiB8CisJICAgICAgRFBUWF9TWVNfQ0xLX1JT VE5fRU4gfAorCSAgICAgIERQVFhfU1lTX0NMS19FTiB8CisJICAgICAgQ0ZHX0RQVFhfVklGX0NM S19SU1ROX0VOIHwKKwkgICAgICBDRkdfRFBUWF9WSUZfQ0xLX0VOOworCXdyaXRlbCh2YWwsIGRw LT5yZWdzICsgU09VUkNFX0RQVFhfQ0FSKTsKKworCXZhbCA9IFNPVVJDRV9QSFlfUlNUTl9FTiB8 IFNPVVJDRV9QSFlfQ0xLX0VOOworCXdyaXRlbCh2YWwsIGRwLT5yZWdzICsgU09VUkNFX1BIWV9D QVIpOworCisJdmFsID0gU09VUkNFX1BLVF9TWVNfUlNUTl9FTiB8CisJICAgICAgU09VUkNFX1BL VF9TWVNfQ0xLX0VOIHwKKwkgICAgICBTT1VSQ0VfUEtUX0RBVEFfUlNUTl9FTiB8CisJICAgICAg U09VUkNFX1BLVF9EQVRBX0NMS19FTjsKKwl3cml0ZWwodmFsLCBkcC0+cmVncyArIFNPVVJDRV9Q S1RfQ0FSKTsKKworCXZhbCA9IFNQRElGX0NEUl9DTEtfUlNUTl9FTiB8CisJICAgICAgU1BESUZf Q0RSX0NMS19FTiB8CisJICAgICAgU09VUkNFX0FJRl9TWVNfUlNUTl9FTiB8CisJICAgICAgU09V UkNFX0FJRl9TWVNfQ0xLX0VOIHwKKwkgICAgICBTT1VSQ0VfQUlGX0NMS19SU1ROX0VOIHwKKwkg ICAgICBTT1VSQ0VfQUlGX0NMS19FTjsKKwl3cml0ZWwodmFsLCBkcC0+cmVncyArIFNPVVJDRV9B SUZfQ0FSKTsKKworCXZhbCA9IFNPVVJDRV9DSVBIRVJfU1lTVEVNX0NMS19SU1ROX0VOIHwKKwkg ICAgICBTT1VSQ0VfQ0lQSEVSX1NZU19DTEtfRU4gfAorCSAgICAgIFNPVVJDRV9DSVBIRVJfQ0hB Ul9DTEtfUlNUTl9FTiB8CisJICAgICAgU09VUkNFX0NJUEhFUl9DSEFSX0NMS19FTjsKKwl3cml0 ZWwodmFsLCBkcC0+cmVncyArIFNPVVJDRV9DSVBIRVJfQ0FSKTsKKworCXZhbCA9IFNPVVJDRV9D UllQVE9fU1lTX0NMS19SU1ROX0VOIHwKKwkgICAgICBTT1VSQ0VfQ1JZUFRPX1NZU19DTEtfRU47 CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBTT1VSQ0VfQ1JZUFRPX0NBUik7CisKKwl2YWwgPSB+ KE1BSUxCT1hfSU5UX01BU0tfQklUIHwgUElGX0lOVF9NQVNLX0JJVCkgJiBBTExfSU5UX01BU0s7 CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBBUEJfSU5UX01BU0spOworfQorCitzdGF0aWMgaW50 IGNkbl9kcF9tYWlsYm94X3JlYWQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCBib29sIGZvcmNl KQoreworCWludCB2YWwsIHJldDsKKworCWlmICghZHAtPmZ3X2FjdGl2ZWQgJiYgIWZvcmNlKQor CQlyZXR1cm4gLUVQRVJNOworCisJcmV0ID0gcmVhZHhfcG9sbF90aW1lb3V0KHJlYWRsLCBkcC0+ cmVncyArIE1BSUxCT1hfRU1QVFlfQUREUiwKKwkJCQkgdmFsLCAhdmFsLCBNQUlMQk9YX1JFVFJZ X1VTLAorCQkJCSBNQUlMQk9YX1RJTUVPVVRfVVMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4g cmV0OworCisJcmV0dXJuIHJlYWRsKGRwLT5yZWdzICsgTUFJTEJPWDBfUkRfREFUQSkgJiAweGZm OworfQorCitzdGF0aWMgaW50IGNkcF9kcF9tYWlsYm94X3dyaXRlKHN0cnVjdCBjZG5fZHBfZGV2 aWNlICpkcCwgdTggdmFsLCBib29sIGZvcmNlKQoreworCWludCByZXQsIGZ1bGw7CisKKwlpZiAo IWRwLT5md19hY3RpdmVkICYmICFmb3JjZSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCXJldCA9IHJl YWR4X3BvbGxfdGltZW91dChyZWFkbCwgZHAtPnJlZ3MgKyBNQUlMQk9YX0ZVTExfQUREUiwKKwkJ CQkgZnVsbCwgIWZ1bGwsIE1BSUxCT1hfUkVUUllfVVMsCisJCQkJIE1BSUxCT1hfVElNRU9VVF9V Uyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwl3cml0ZWwodmFsLCBkcC0+cmVn cyArIE1BSUxCT1gwX1dSX0RBVEEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2Ru X2RwX21haWxib3hfdmFsaWRhdGVfcmVjZWl2ZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsCisJ CQkJCSAgIHU4IG1vZHVsZV9pZCwgdTggb3Bjb2RlLAorCQkJCQkgICB1OCByZXFfc2l6ZSkKK3sK Kwl1MzIgbWJveF9zaXplLCBpOworCXU4IGhlYWRlcls0XTsKKwlpbnQgcmV0OworCisJLyogcmVh ZCB0aGUgaGVhZGVyIG9mIHRoZSBtZXNzYWdlICovCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykg eworCQlyZXQgPSBjZG5fZHBfbWFpbGJveF9yZWFkKGRwLCAwKTsKKwkJaWYgKHJldCA8IDApCisJ CQlyZXR1cm4gcmV0OworCisJCWhlYWRlcltpXSA9IHJldDsKKwl9CisKKwltYm94X3NpemUgPSAo aGVhZGVyWzJdIDw8IDgpIHwgaGVhZGVyWzNdOworCisJaWYgKG9wY29kZSAhPSBoZWFkZXJbMF0g fHwgbW9kdWxlX2lkICE9IGhlYWRlclsxXSB8fAorCSAgICByZXFfc2l6ZSAhPSBtYm94X3NpemUp IHsKKwkJLyoKKwkJICogSWYgdGhlIG1lc3NhZ2UgaW4gbWFpbGJveCBpcyBub3Qgd2hhdCB3ZSB3 YW50LCB3ZSBuZWVkIHRvCisJCSAqIGNsZWFyIHRoZSBtYWlsYm94IGJ5IHJlYWQuCisJCSAqLwor CQlmb3IgKGkgPSAwOyBpIDwgbWJveF9zaXplOyBpKyspCisJCQlpZiAoY2RuX2RwX21haWxib3hf cmVhZChkcCwgMCkgPCAwKQorCQkJCWJyZWFrOworCisJCXJldHVybiAtRUlOVkFMOworCX0KKwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9tYWlsYm94X3JlYWRfcmVjZWl2ZShz dHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsCisJCQkJICAgICAgIHU4ICpidWZmLCB1OCBidWZmX3Np emUpCit7CisJdTMyIGk7CisJaW50IHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBidWZmX3NpemU7 IGkrKykgeworCQlyZXQgPSBjZG5fZHBfbWFpbGJveF9yZWFkKGRwLCAwKTsKKwkJaWYgKHJldCA8 IDApCisJCQlyZXR1cm4gcmV0OworCisJCWJ1ZmZbaV0gPSByZXQ7CisJfQorCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX21haWxib3hfc2VuZChzdHJ1Y3QgY2RuX2RwX2Rldmlj ZSAqZHAsIHU4IG1vZHVsZV9pZCwKKwkJCSAgICAgICB1OCBvcGNvZGUsIHUxNiBzaXplLCB1OCAq bWVzc2FnZSkKK3sKKwl1OCBoZWFkZXJbNF07CisJaW50IHJldCwgaTsKKworCWhlYWRlclswXSA9 IG9wY29kZTsKKwloZWFkZXJbMV0gPSBtb2R1bGVfaWQ7CisJaGVhZGVyWzJdID0gKHNpemUgPj4g OCkgJiAweGZmOworCWhlYWRlclszXSA9IHNpemUgJiAweGZmOworCisJZm9yIChpID0gMDsgaSA8 IDQ7IGkrKykgeworCQlyZXQgPSBjZHBfZHBfbWFpbGJveF93cml0ZShkcCwgaGVhZGVyW2ldLCAw KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHNp emU7IGkrKykgeworCQlyZXQgPSBjZHBfZHBfbWFpbGJveF93cml0ZShkcCwgbWVzc2FnZVtpXSwg MCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IGNkbl9kcF9yZWdfd3JpdGUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1MTYg YWRkciwgdTMyIHZhbCkKK3sKKwl1OCBtc2dbNl07CisKKwltc2dbMF0gPSAoYWRkciA+PiA4KSAm IDB4ZmY7CisJbXNnWzFdID0gYWRkciAmIDB4ZmY7CisJbXNnWzJdID0gKHZhbCA+PiAyNCkgJiAw eGZmOworCW1zZ1szXSA9ICh2YWwgPj4gMTYpICYgMHhmZjsKKwltc2dbNF0gPSAodmFsID4+IDgp ICYgMHhmZjsKKwltc2dbNV0gPSB2YWwgJiAweGZmOworCXJldHVybiBjZG5fZHBfbWFpbGJveF9z ZW5kKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsIERQVFhfV1JJVEVfUkVHSVNURVIsCisJCQkJICAg c2l6ZW9mKG1zZyksIG1zZyk7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX3JlZ193cml0ZV9iaXQo c3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1MTYgYWRkciwKKwkJCQl1OCBzdGFydF9iaXQsIHU4 IGJpdHNfbm8sIHUzMiB2YWwpCit7CisJdTggZmllbGRbOF07CisKKwlmaWVsZFswXSA9IChhZGRy ID4+IDgpICYgMHhmZjsKKwlmaWVsZFsxXSA9IGFkZHIgJiAweGZmOworCWZpZWxkWzJdID0gc3Rh cnRfYml0OworCWZpZWxkWzNdID0gYml0c19ubzsKKwlmaWVsZFs0XSA9ICh2YWwgPj4gMjQpICYg MHhmZjsKKwlmaWVsZFs1XSA9ICh2YWwgPj4gMTYpICYgMHhmZjsKKwlmaWVsZFs2XSA9ICh2YWwg Pj4gOCkgJiAweGZmOworCWZpZWxkWzddID0gdmFsICYgMHhmZjsKKworCXJldHVybiBjZG5fZHBf bWFpbGJveF9zZW5kKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsIERQVFhfV1JJVEVfRklFTEQsCisJ CQkJICAgc2l6ZW9mKGZpZWxkKSwgZmllbGQpOworfQorCitpbnQgY2RuX2RwX2RwY2RfcmVhZChz dHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHUzMiBhZGRyLCB1OCAqZGF0YSwgdTE2IGxlbikKK3sK Kwl1OCBtc2dbNV0sIHJlZ1s1XTsKKwlpbnQgcmV0OworCisJbXNnWzBdID0gKGxlbiA+PiA4KSAm IDB4ZmY7CisJbXNnWzFdID0gbGVuICYgMHhmZjsKKwltc2dbMl0gPSAoYWRkciA+PiAxNikgJiAw eGZmOworCW1zZ1szXSA9IChhZGRyID4+IDgpICYgMHhmZjsKKwltc2dbNF0gPSBhZGRyICYgMHhm ZjsKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF9zZW5kKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsIERQ VFhfUkVBRF9EUENELAorCQkJCSAgc2l6ZW9mKG1zZyksIG1zZyk7CisJaWYgKHJldCkKKwkJZ290 byBlcnJfZHBjZF9yZWFkOworCisJcmV0ID0gY2RuX2RwX21haWxib3hfdmFsaWRhdGVfcmVjZWl2 ZShkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLAorCQkJCQkgICAgICBEUFRYX1JFQURfRFBDRCwKKwkJ CQkJICAgICAgc2l6ZW9mKHJlZykgKyBsZW4pOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2RwY2Rf cmVhZDsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3JlYWRfcmVjZWl2ZShkcCwgcmVnLCBzaXpl b2YocmVnKSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZHBjZF9yZWFkOworCisJcmV0ID0gY2Ru X2RwX21haWxib3hfcmVhZF9yZWNlaXZlKGRwLCBkYXRhLCBsZW4pOworCitlcnJfZHBjZF9yZWFk OgorCXJldHVybiByZXQ7Cit9CisKK2ludCBjZG5fZHBfZHBjZF93cml0ZShzdHJ1Y3QgY2RuX2Rw X2RldmljZSAqZHAsIHUzMiBhZGRyLCB1OCB2YWx1ZSkKK3sKKwl1OCBtc2dbNl0sIHJlZ1s1XTsK KwlpbnQgcmV0OworCisJbXNnWzBdID0gMDsKKwltc2dbMV0gPSAxOworCW1zZ1syXSA9IChhZGRy ID4+IDE2KSAmIDB4ZmY7CisJbXNnWzNdID0gKGFkZHIgPj4gOCkgJiAweGZmOworCW1zZ1s0XSA9 IGFkZHIgJiAweGZmOworCW1zZ1s1XSA9IHZhbHVlOworCXJldCA9IGNkbl9kcF9tYWlsYm94X3Nl bmQoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwgRFBUWF9XUklURV9EUENELAorCQkJCSAgc2l6ZW9m KG1zZyksIG1zZyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZHBjZF93cml0ZTsKKworCXJldCA9 IGNkbl9kcF9tYWlsYm94X3ZhbGlkYXRlX3JlY2VpdmUoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwK KwkJCQkJICAgICAgRFBUWF9XUklURV9EUENELCBzaXplb2YocmVnKSk7CisJaWYgKHJldCkKKwkJ Z290byBlcnJfZHBjZF93cml0ZTsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3JlYWRfcmVjZWl2 ZShkcCwgcmVnLCBzaXplb2YocmVnKSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZHBjZF93cml0 ZTsKKworCWlmIChhZGRyICE9IChyZWdbMl0gPDwgMTYgfCByZWdbM10gPDwgOCB8IHJlZ1s0XSkp CisJCXJldCA9IC1FSU5WQUw7CisKK2Vycl9kcGNkX3dyaXRlOgorCWlmIChyZXQpCisJCWRldl9l cnIoZHAtPmRldiwgImRwY2Qgd3JpdGUgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0 OworfQorCitpbnQgY2RuX2RwX2xvYWRfZmlybXdhcmUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw LCBjb25zdCB1MzIgKmlfbWVtLAorCQkJIHUzMiBpX3NpemUsIGNvbnN0IHUzMiAqZF9tZW0sIHUz MiBkX3NpemUpCit7CisJdTMyIHJlZzsKKwlpbnQgaSwgcmV0OworCisJLyogcmVzZXQgdWNwdSBi ZWZvcmUgbG9hZCBmaXJtd2FyZSovCisJd3JpdGVsKEFQQl9JUkFNX1BBVEggfCBBUEJfRFJBTV9Q QVRIIHwgQVBCX1hUX1JFU0VULAorCSAgICAgICBkcC0+cmVncyArIEFQQl9DVFJMKTsKKworCWZv ciAoaSA9IDA7IGkgPCBpX3NpemU7IGkgKz0gNCkKKwkJd3JpdGVsKCppX21lbSsrLCBkcC0+cmVn cyArIEFERFJfSU1FTSArIGkpOworCisJZm9yIChpID0gMDsgaSA8IGRfc2l6ZTsgaSArPSA0KQor CQl3cml0ZWwoKmRfbWVtKyssIGRwLT5yZWdzICsgQUREUl9ETUVNICsgaSk7CisKKwkvKiB1bi1y ZXNldCB1Y3B1ICovCisJd3JpdGVsKDAsIGRwLT5yZWdzICsgQVBCX0NUUkwpOworCisJLyogY2hl Y2sgdGhlIGtlZXAgYWxpdmUgcmVnaXN0ZXIgdG8gbWFrZSBzdXJlIGZ3IHdvcmtpbmcgKi8KKwly ZXQgPSByZWFkeF9wb2xsX3RpbWVvdXQocmVhZGwsIGRwLT5yZWdzICsgS0VFUF9BTElWRSwKKwkJ CQkgcmVnLCByZWcsIDIwMDAsIEZXX0FMSVZFX1RJTUVPVVRfVVMpOworCWlmIChyZXQgPCAwKSB7 CisJCWRldl9lcnIoZHAtPmRldiwgImZhaWxlZCB0byBsb2FkZWQgdGhlIEZXIHJlZyA9ICV4XG4i LCByZWcpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZWcgPSByZWFkbChkcC0+cmVncyAr IFZFUl9MKSAmIDB4ZmY7CisJZHAtPmZ3X3ZlcnNpb24gPSByZWc7CisJcmVnID0gcmVhZGwoZHAt PnJlZ3MgKyBWRVJfSCkgJiAweGZmOworCWRwLT5md192ZXJzaW9uIHw9IHJlZyA8PCA4OworCXJl ZyA9IHJlYWRsKGRwLT5yZWdzICsgVkVSX0xJQl9MX0FERFIpICYgMHhmZjsKKwlkcC0+ZndfdmVy c2lvbiB8PSByZWcgPDwgMTY7CisJcmVnID0gcmVhZGwoZHAtPnJlZ3MgKyBWRVJfTElCX0hfQURE UikgJiAweGZmOworCWRwLT5md192ZXJzaW9uIHw9IHJlZyA8PCAyNDsKKworCWRldl9kYmcoZHAt PmRldiwgImZpcm13YXJlIHZlcnNpb246ICV4XG4iLCBkcC0+ZndfdmVyc2lvbik7CisKKwlyZXR1 cm4gMDsKK30KKworaW50IGNkbl9kcF9zZXRfZmlybXdhcmVfYWN0aXZlKHN0cnVjdCBjZG5fZHBf ZGV2aWNlICpkcCwgYm9vbCBlbmFibGUpCit7CisJdTggbXNnWzVdOworCWludCByZXQsIGk7CisK Kwltc2dbMF0gPSBHRU5FUkFMX01BSU5fQ09OVFJPTDsKKwltc2dbMV0gPSBNQl9NT0RVTEVfSURf R0VORVJBTDsKKwltc2dbMl0gPSAwOworCW1zZ1szXSA9IDE7CisJbXNnWzRdID0gZW5hYmxlID8g RldfQUNUSVZFIDogRldfU1RBTkRCWTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YobXNnKTsg aSsrKSB7CisJCXJldCA9IGNkcF9kcF9tYWlsYm94X3dyaXRlKGRwLCBtc2dbaV0sIDEpOworCQlp ZiAocmV0KQorCQkJZ290byBlcnJfc2V0X2Zpcm13YXJlX2FjdGl2ZTsKKwl9CisKKwkvKiByZWFk IHRoZSBmaXJtd2FyZSBzdGF0ZSAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YobXNnKTsgaSsr KSAgeworCQlyZXQgPSBjZG5fZHBfbWFpbGJveF9yZWFkKGRwLCAxKTsKKwkJaWYgKHJldCA8IDAp CisJCQlnb3RvIGVycl9zZXRfZmlybXdhcmVfYWN0aXZlOworCisJCW1zZ1tpXSA9IHJldDsKKwl9 CisKKwlkcC0+ZndfYWN0aXZlZCA9IChtc2dbNF0gPT0gRldfQUNUSVZFKTsKKwlyZXQgPSAwOwor CitlcnJfc2V0X2Zpcm13YXJlX2FjdGl2ZToKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2VycihkcC0+ ZGV2LCAic2V0IGZpcm13YXJlIGFjdGl2ZSBmYWlsZWRcbiIpOworCXJldHVybiByZXQ7Cit9CisK K2ludCBjZG5fZHBfc2V0X2hvc3RfY2FwKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgdTggbGFu ZXMsIGJvb2wgZmxpcCkKK3sKKwl1OCBtc2dbOF07CisJaW50IHJldDsKKworCW1zZ1swXSA9IENE Tl9EUF9NQVhfTElOS19SQVRFOworCW1zZ1sxXSA9IGxhbmVzOworCW1zZ1syXSA9IFZPTFRBR0Vf TEVWRUxfMjsKKwltc2dbM10gPSBQUkVfRU1QSEFTSVNfTEVWRUxfMzsKKwltc2dbNF0gPSBQVFMx IHwgUFRTMiB8IFBUUzMgfCBQVFM0OworCW1zZ1s1XSA9IEZBU1RfTFRfTk9UX1NVUFBPUlQ7CisJ bXNnWzZdID0gZmxpcCA/IExBTkVfTUFQUElOR19GTElQUEVEIDogTEFORV9NQVBQSU5HX05PUk1B TDsKKwltc2dbN10gPSBFTkhBTkNFRDsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3NlbmQoZHAs IE1CX01PRFVMRV9JRF9EUF9UWCwKKwkJCQkgIERQVFhfU0VUX0hPU1RfQ0FQQUJJTElUSUVTLAor CQkJCSAgc2l6ZW9mKG1zZyksIG1zZyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfc2V0X2hvc3Rf Y2FwOworCisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgRFBfQVVYX1NXQVBfSU5WRVJTSU9O X0NPTlRST0wsCisJCQkgICAgICAgQVVYX0hPU1RfSU5WRVJUKTsKKworZXJyX3NldF9ob3N0X2Nh cDoKKwlpZiAocmV0KQorCQlkZXZfZXJyKGRwLT5kZXYsICJzZXQgaG9zdCBjYXAgZmFpbGVkOiAl ZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgY2RuX2RwX2V2ZW50X2NvbmZpZyhz dHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJdTggbXNnWzVdOworCWludCByZXQ7CisKKwlt ZW1zZXQobXNnLCAwLCBzaXplb2YobXNnKSk7CisKKwltc2dbMF0gPSBEUFRYX0VWRU5UX0VOQUJM RV9IUEQgfCBEUFRYX0VWRU5UX0VOQUJMRV9UUkFJTklORzsKKworCXJldCA9IGNkbl9kcF9tYWls Ym94X3NlbmQoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwgRFBUWF9FTkFCTEVfRVZFTlQsCisJCQkJ ICBzaXplb2YobXNnKSwgbXNnKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKGRwLT5kZXYsICJzZXQg ZXZlbnQgY29uZmlnIGZhaWxlZDogJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCit1 MzIgY2RuX2RwX2dldF9ldmVudChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJcmV0dXJu IHJlYWRsKGRwLT5yZWdzICsgU1dfRVZFTlRTMCk7Cit9CisKK2ludCBjZG5fZHBfZ2V0X2hwZF9z dGF0dXMoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCXU4IHN0YXR1czsKKwlpbnQgcmV0 OworCisJcmV0ID0gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLCBE UFRYX0hQRF9TVEFURSwKKwkJCQkgIDAsIE5VTEwpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2dl dF9ocGQ7CisKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF92YWxpZGF0ZV9yZWNlaXZlKGRwLCBNQl9N T0RVTEVfSURfRFBfVFgsCisJCQkJCSAgICAgIERQVFhfSFBEX1NUQVRFLCBzaXplb2Yoc3RhdHVz KSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZ2V0X2hwZDsKKworCXJldCA9IGNkbl9kcF9tYWls Ym94X3JlYWRfcmVjZWl2ZShkcCwgJnN0YXR1cywgc2l6ZW9mKHN0YXR1cykpOworCWlmIChyZXQp CisJCWdvdG8gZXJyX2dldF9ocGQ7CisKKwlyZXR1cm4gc3RhdHVzOworCitlcnJfZ2V0X2hwZDoK KwlkZXZfZXJyKGRwLT5kZXYsICJnZXQgaHBkIHN0YXR1cyBmYWlsZWQ6ICVkXG4iLCByZXQpOwor CXJldHVybiByZXQ7Cit9CisKK2ludCBjZG5fZHBfZ2V0X2VkaWRfYmxvY2sodm9pZCAqZGF0YSwg dTggKmVkaWQsCisJCQkgIHVuc2lnbmVkIGludCBibG9jaywgc2l6ZV90IGxlbmd0aCkKK3sKKwlz dHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBkYXRhOworCXU4IG1zZ1syXSwgcmVnWzJdOworCWlu dCByZXQ7CisKKwltc2dbMF0gPSBibG9jayAvIDI7CisJbXNnWzFdID0gYmxvY2sgJSAyOworCisJ cmV0ID0gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLCBEUFRYX0dF VF9FRElELAorCQkJCSAgc2l6ZW9mKG1zZyksIG1zZyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJf Z2V0X2VkaWQ7CisKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF92YWxpZGF0ZV9yZWNlaXZlKGRwLCBN Ql9NT0RVTEVfSURfRFBfVFgsCisJCQkJCSAgICAgIERQVFhfR0VUX0VESUQsCisJCQkJCSAgICAg IHNpemVvZihyZWcpICsgbGVuZ3RoKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9nZXRfZWRpZDsK KworCXJldCA9IGNkbl9kcF9tYWlsYm94X3JlYWRfcmVjZWl2ZShkcCwgcmVnLCBzaXplb2YocmVn KSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZ2V0X2VkaWQ7CisKKwlyZXQgPSBjZG5fZHBfbWFp bGJveF9yZWFkX3JlY2VpdmUoZHAsIGVkaWQsIGxlbmd0aCk7CisJaWYgKHJldCkKKwkJZ290byBl cnJfZ2V0X2VkaWQ7CisKKwlpZiAocmVnWzBdICE9IGxlbmd0aCB8fCByZWdbMV0gIT0gYmxvY2sg LyAyKQorCQlyZXQgPSAtRUlOVkFMOworCitlcnJfZ2V0X2VkaWQ6CisJaWYgKHJldCkKKwkJZGV2 X2VycihkcC0+ZGV2LCAiZ2V0IGJsb2NrWyVkXSBlZGlkIGZhaWxlZDogJWRcbiIsIGJsb2NrLCBy ZXQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBjZG5fZHBfdHJhaW5pbmdfc3RhcnQoc3RydWN0 IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwl1OCBtc2cs IGV2ZW50WzJdOworCWludCByZXQ7CisKKwltc2cgPSBMSU5LX1RSQUlOSU5HX1JVTjsKKworCS8q IHN0YXJ0IHRyYWluaW5nICovCisJcmV0ID0gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9E VUxFX0lEX0RQX1RYLCBEUFRYX1RSQUlOSU5HX0NPTlRST0wsCisJCQkJICBzaXplb2YobXNnKSwg Jm1zZyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfdHJhaW5pbmdfc3RhcnQ7CisKKwl0aW1lb3V0 ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoTElOS19UUkFJTklOR19USU1FT1VUX01TKTsK Kwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsKKwkJbXNsZWVwKExJTktf VFJBSU5JTkdfUkVUUllfTVMpOworCQlyZXQgPSBjZG5fZHBfbWFpbGJveF9zZW5kKGRwLCBNQl9N T0RVTEVfSURfRFBfVFgsCisJCQkJCSAgRFBUWF9SRUFEX0VWRU5ULCAwLCBOVUxMKTsKKwkJaWYg KHJldCkKKwkJCWdvdG8gZXJyX3RyYWluaW5nX3N0YXJ0OworCisJCXJldCA9IGNkbl9kcF9tYWls Ym94X3ZhbGlkYXRlX3JlY2VpdmUoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwKKwkJCQkJCSAgICAg IERQVFhfUkVBRF9FVkVOVCwKKwkJCQkJCSAgICAgIHNpemVvZihldmVudCkpOworCQlpZiAocmV0 KQorCQkJZ290byBlcnJfdHJhaW5pbmdfc3RhcnQ7CisKKwkJcmV0ID0gY2RuX2RwX21haWxib3hf cmVhZF9yZWNlaXZlKGRwLCBldmVudCwgc2l6ZW9mKGV2ZW50KSk7CisJCWlmIChyZXQpCisJCQln b3RvIGVycl90cmFpbmluZ19zdGFydDsKKworCQlpZiAoZXZlbnRbMV0gJiBFUV9QSEFTRV9GSU5J U0hFRCkKKwkJCXJldHVybiAwOworCX0KKworCXJldCA9IC1FVElNRURPVVQ7CisKK2Vycl90cmFp bmluZ19zdGFydDoKKwlkZXZfZXJyKGRwLT5kZXYsICJ0cmFpbmluZyBmYWlsZWQ6ICVkXG4iLCBy ZXQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBjZG5fZHBfZ2V0X3RyYWluaW5nX3N0YXR1cyhz dHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJdTggc3RhdHVzWzEwXTsKKwlpbnQgcmV0Owor CisJcmV0ID0gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLCBEUFRY X1JFQURfTElOS19TVEFULAorCQkJCSAgMCwgTlVMTCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJf Z2V0X3RyYWluaW5nX3N0YXR1czsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3ZhbGlkYXRlX3Jl Y2VpdmUoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwKKwkJCQkJICAgICAgRFBUWF9SRUFEX0xJTktf U1RBVCwKKwkJCQkJICAgICAgc2l6ZW9mKHN0YXR1cykpOworCWlmIChyZXQpCisJCWdvdG8gZXJy X2dldF90cmFpbmluZ19zdGF0dXM7CisKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF9yZWFkX3JlY2Vp dmUoZHAsIHN0YXR1cywgc2l6ZW9mKHN0YXR1cykpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2dl dF90cmFpbmluZ19zdGF0dXM7CisKKwlkcC0+bGluay5yYXRlID0gc3RhdHVzWzBdOworCWRwLT5s aW5rLm51bV9sYW5lcyA9IHN0YXR1c1sxXTsKKworZXJyX2dldF90cmFpbmluZ19zdGF0dXM6CisJ aWYgKHJldCkKKwkJZGV2X2VycihkcC0+ZGV2LCAiZ2V0IHRyYWluaW5nIHN0YXR1cyBmYWlsZWQ6 ICVkXG4iLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBjZG5fZHBfc2V0X3ZpZGVvX3N0 YXR1cyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIGludCBhY3RpdmUpCit7CisJdTggbXNnOwor CWludCByZXQ7CisKKwltc2cgPSAhIWFjdGl2ZTsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3Nl bmQoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwgRFBUWF9TRVRfVklERU8sCisJCQkJICBzaXplb2Yo bXNnKSwgJm1zZyk7CisJaWYgKHJldCkKKwkJZGV2X2VycihkcC0+ZGV2LCAic2V0IHZpZGVvIHN0 YXR1cyBmYWlsZWQ6ICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlu dCBjZG5fZHBfZ2V0X21zYV9taXNjKHN0cnVjdCB2aWRlb19pbmZvICp2aWRlbywKKwkJCSAgICAg ICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwl1MzIgbXNhX21pc2M7CisJdTgg dmFsWzJdOworCisJc3dpdGNoICh2aWRlby0+Y29sb3JfZm10KSB7CisJY2FzZSBQWExfUkdCOgor CWNhc2UgWV9PTkxZOgorCQl2YWxbMF0gPSAwOworCQlicmVhazsKKwkvKiBzZXQgWVVWIGRlZmF1 bHQgY29sb3Igc3BhY2UgY29udmVyc2lvbiB0byBCVDYwMSAqLworCWNhc2UgWUNCQ1JfNF80XzQ6 CisJCXZhbFswXSA9IDYgKyBCVF82MDEgKiA4OworCQlicmVhazsKKwljYXNlIFlDQkNSXzRfMl8y OgorCQl2YWxbMF0gPSA1ICsgQlRfNjAxICogODsKKwkJYnJlYWs7CisJY2FzZSBZQ0JDUl80XzJf MDoKKwkJdmFsWzBdID0gNTsKKwkJYnJlYWs7CisJfTsKKworCXN3aXRjaCAodmlkZW8tPmNvbG9y X2RlcHRoKSB7CisJY2FzZSA2OgorCQl2YWxbMV0gPSAwOworCQlicmVhazsKKwljYXNlIDg6CisJ CXZhbFsxXSA9IDE7CisJCWJyZWFrOworCWNhc2UgMTA6CisJCXZhbFsxXSA9IDI7CisJCWJyZWFr OworCWNhc2UgMTI6CisJCXZhbFsxXSA9IDM7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCXZhbFsx XSA9IDQ7CisJCWJyZWFrOworCX07CisKKwltc2FfbWlzYyA9IDIgKiB2YWxbMF0gKyAzMiAqIHZh bFsxXSArCisJCSAgICgodmlkZW8tPmNvbG9yX2ZtdCA9PSBZX09OTFkpID8gKDEgPDwgMTQpIDog MCk7CisKKwlyZXR1cm4gbXNhX21pc2M7Cit9CisKK2ludCBjZG5fZHBfY29uZmlnX3ZpZGVvKHN0 cnVjdCBjZG5fZHBfZGV2aWNlICpkcCkKK3sKKwlzdHJ1Y3QgdmlkZW9faW5mbyAqdmlkZW8gPSAm ZHAtPnZpZGVvX2luZm87CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmZHAtPm1v ZGU7CisJdTY0IHN5bWJvbCwgdG1wOworCXUzMiB2YWwsIGxpbmtfcmF0ZTsKKwl1OCBiaXRfcGVy X3BpeCwgdHVfc2l6ZV9yZWcgPSBUVV9TSVpFOworCWludCByZXQ7CisKKwliaXRfcGVyX3BpeCA9 ICh2aWRlby0+Y29sb3JfZm10ID09IFlDQkNSXzRfMl8yKSA/CisJCSAgICAgICh2aWRlby0+Y29s b3JfZGVwdGggKiAyKSA6ICh2aWRlby0+Y29sb3JfZGVwdGggKiAzKTsKKworCWxpbmtfcmF0ZSA9 IGRybV9kcF9id19jb2RlX3RvX2xpbmtfcmF0ZShkcC0+bGluay5yYXRlKSAvIDEwMDA7CisKKwl2 YWwgPSBWSUZfQllQQVNTX0lOVEVSTEFDRTsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBC TkRfSFNZTkMyVlNZTkMsIHZhbCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY29uZmlnX3ZpZGVv OworCisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgSFNZTkMyVlNZTkNfUE9MX0NUUkwsIDAp OworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NvbmZpZ192aWRlbzsKKworCS8qCisJICogZ2V0IGEg YmVzdCB0dV9zaXplIGFuZCB2YWxpZCBzeW1ib2w6CisJICogMS4gY2hvc2UgTGNsayBmcmVxKDE2 Mk1oeiwgMjcwTWh6LCA1NDBNaHopLCBzZXQgVFUgdG8gMzIKKwkgKiAyLiBjYWxjdWxhdGUgVlMo dmFsaWQgc3ltYm9sKSA9IFRVICogUGNsayAqIEJwcCAvIChMY2xrICogTGFuZXMpCisJICogMy4g aWYgVlMgPiAqLjg1IG9yIFZTIDwgKi4xIG9yIFZTIDwgMiBvciBUVSA8IFZTICsgNCwgdGhlbiBz ZXQKKwkgKiAgICBUVSArPSAyIGFuZCByZXBlYXQgMm5kIHN0ZXAuCisJICovCisJZG8geworCQl0 dV9zaXplX3JlZyArPSAyOworCQl0bXAgPSB0dV9zaXplX3JlZyAqIG1vZGUtPmNsb2NrICogYml0 X3Blcl9waXg7CisJCXRtcCAvPSBkcC0+bGluay5udW1fbGFuZXMgKiBsaW5rX3JhdGUgKiA4Owor CQlzeW1ib2wgPSB0bXAgLyAxMDAwOworCX0gd2hpbGUgKChzeW1ib2wgPD0gMSkgfHwgKHR1X3Np emVfcmVnIC0gc3ltYm9sIDwgNCkgfHwKKwkJICh0bXAgJSAxMDAwID4gODUwKSB8fCAodG1wICUg MTAwMCA8IDEwMCkpOworCisJdmFsID0gc3ltYm9sICsgKHR1X3NpemVfcmVnIDw8IDgpOworCXJl dCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIERQX0ZSQU1FUl9UVSwgdmFsKTsKKwlpZiAocmV0KQor CQlnb3RvIGVycl9jb25maWdfdmlkZW87CisKKwkvKiBzZXQgdGhlIEZJRk8gQnVmZmVyIHNpemUg Ki8KKwl2YWwgPSAoKG1vZGUtPmNsb2NrICogKHN5bWJvbCArIDEpIC8gMTAwMCkgKyBsaW5rX3Jh dGUpOworCXZhbCAvPSAoZHAtPmxpbmsubnVtX2xhbmVzICogbGlua19yYXRlKTsKKwl2YWwgPSA4 ICogKHN5bWJvbCArIDEpIC8gYml0X3Blcl9waXggLSB2YWw7CisJdmFsICs9IDI7CisJcmV0ID0g Y2RuX2RwX3JlZ193cml0ZShkcCwgRFBfVkNfVEFCTEUoMTUpLCB2YWwpOworCisJc3dpdGNoICh2 aWRlby0+Y29sb3JfZGVwdGgpIHsKKwljYXNlIDY6CisJCXZhbCA9IEJDU182OworCQlicmVhazsK KwljYXNlIDg6CisJCXZhbCA9IEJDU184OworCQlicmVhazsKKwljYXNlIDEwOgorCQl2YWwgPSBC Q1NfMTA7CisJCWJyZWFrOworCWNhc2UgMTI6CisJCXZhbCA9IEJDU18xMjsKKwkJYnJlYWs7CisJ Y2FzZSAxNjoKKwkJdmFsID0gQkNTXzE2OworCQlicmVhazsKKwl9OworCisJdmFsICs9IHZpZGVv LT5jb2xvcl9mbXQgPDwgODsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBEUF9GUkFNRVJf UFhMX1JFUFIsIHZhbCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY29uZmlnX3ZpZGVvOworCisJ dmFsID0gdmlkZW8tPmhfc3luY19wb2xhcml0eSA/IERQX0ZSQU1FUl9TUF9IU1AgOiAwOworCXZh bCB8PSB2aWRlby0+dl9zeW5jX3BvbGFyaXR5ID8gRFBfRlJBTUVSX1NQX1ZTUCA6IDA7CisJcmV0 ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgRFBfRlJBTUVSX1NQLCB2YWwpOworCWlmIChyZXQpCisJ CWdvdG8gZXJyX2NvbmZpZ192aWRlbzsKKworCXZhbCA9IChtb2RlLT5oc3luY19zdGFydCAtIG1v ZGUtPmhkaXNwbGF5KSA8PCAxNjsKKwl2YWwgfD0gbW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNf ZW5kOworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIERQX0ZST05UX0JBQ0tfUE9SQ0gsIHZh bCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY29uZmlnX3ZpZGVvOworCisJdmFsID0gbW9kZS0+ aGRpc3BsYXkgKiBiaXRfcGVyX3BpeCAvIDg7CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwg RFBfQllURV9DT1VOVCwgdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jb25maWdfdmlkZW87 CisKKwl2YWwgPSBtb2RlLT5odG90YWwgfCAoKG1vZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5jX3N0 YXJ0KSA8PCAxNik7CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgTVNBX0hPUklaT05UQUxf MCwgdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jb25maWdfdmlkZW87CisKKwl2YWwgPSBt b2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFydDsKKwl2YWwgfD0gKG1vZGUtPmhkaXNw bGF5IDw8IDE2KSB8ICh2aWRlby0+aF9zeW5jX3BvbGFyaXR5IDw8IDE1KTsKKwlyZXQgPSBjZG5f ZHBfcmVnX3dyaXRlKGRwLCBNU0FfSE9SSVpPTlRBTF8xLCB2YWwpOworCWlmIChyZXQpCisJCWdv dG8gZXJyX2NvbmZpZ192aWRlbzsKKworCXZhbCA9IG1vZGUtPnZ0b3RhbDsKKwl2YWwgfD0gKCht b2RlLT52dG90YWwgLSBtb2RlLT52c3luY19zdGFydCkgPDwgMTYpOworCXJldCA9IGNkbl9kcF9y ZWdfd3JpdGUoZHAsIE1TQV9WRVJUSUNBTF8wLCB2YWwpOworCWlmIChyZXQpCisJCWdvdG8gZXJy X2NvbmZpZ192aWRlbzsKKworCXZhbCA9IG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5jX3N0 YXJ0OworCXZhbCB8PSBtb2RlLT52ZGlzcGxheSA8PCAxNiB8ICh2aWRlby0+dl9zeW5jX3BvbGFy aXR5IDw8IDE1KTsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBNU0FfVkVSVElDQUxfMSwg dmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jb25maWdfdmlkZW87CisKKwl2YWwgPSBjZG5f ZHBfZ2V0X21zYV9taXNjKHZpZGVvLCBtb2RlKTsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRw LCBNU0FfTUlTQywgdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jb25maWdfdmlkZW87CisK KwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBTVFJFQU1fQ09ORklHLCAxKTsKKwlpZiAocmV0 KQorCQlnb3RvIGVycl9jb25maWdfdmlkZW87CisKKwl2YWwgPSBtb2RlLT5oc3luY19lbmQgLSBt b2RlLT5oc3luY19zdGFydDsKKwl2YWwgfD0gKG1vZGUtPmhkaXNwbGF5IDw8IDE2KTsKKwlyZXQg PSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBEUF9IT1JJWk9OVEFMLCB2YWwpOworCWlmIChyZXQpCisJ CWdvdG8gZXJyX2NvbmZpZ192aWRlbzsKKworCXZhbCA9IG1vZGUtPnZ0b3RhbDsKKwl2YWwgLT0g KG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZkaXNwbGF5KTsKKwl2YWwgfD0gKG1vZGUtPnZ0b3RhbCAt IG1vZGUtPnZzeW5jX3N0YXJ0KSA8PCAxNjsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBE UF9WRVJUSUNBTF8wLCB2YWwpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NvbmZpZ192aWRlbzsK KworCXZhbCA9IG1vZGUtPnZ0b3RhbDsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBEUF9W RVJUSUNBTF8xLCB2YWwpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NvbmZpZ192aWRlbzsKKwor CXZhbCA9ICAwOworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGVfYml0KGRwLCBEUF9WQl9JRCwgMiwg MSwgdmFsKTsKKworZXJyX2NvbmZpZ192aWRlbzoKKwlpZiAocmV0KQorCQlkZXZfZXJyKGRwLT5k ZXYsICJjb25maWcgdmlkZW8gZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQor CitpbnQgY2RuX2RwX2F1ZGlvX3N0b3Aoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCBzdHJ1Y3Qg YXVkaW9faW5mbyAqYXVkaW8pCit7CisJdTMyIHZhbDsKKwlpbnQgcmV0OworCisJcmV0ID0gY2Ru X2RwX3JlZ193cml0ZShkcCwgQVVESU9fUEFDS19DT05UUk9MLCAwKTsKKwlpZiAocmV0KSB7CisJ CWRldl9lcnIoZHAtPmRldiwgImF1ZGlvIHN0b3AgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcmV0 dXJuIHJldDsKKwl9CisKKwl2YWwgPSBTUERJRl9BVkdfU0VMIHwgU1BESUZfSklUVEVSX0JZUEFT UzsKKwl2YWwgfD0gU1BESUZfRklGT19NSURfUkFOR0UoMHhlMCk7CisJdmFsIHw9IFNQRElGX0pJ VFRFUl9USFJTSCgweGUwKTsKKwl2YWwgfD0gU1BESUZfSklUVEVSX0FWR19XSU4oNyk7CisJd3Jp dGVsKHZhbCwgZHAtPnJlZ3MgKyBTUERJRl9DVFJMX0FERFIpOworCisJLyogY2xlYXJuIHRoZSBh dWRpbyBjb25maWcgYW5kIHJlc2V0ICovCisJd3JpdGVsKDAsIGRwLT5yZWdzICsgQVVESU9fU1JD X0NOVEwpOworCXdyaXRlbCgwLCBkcC0+cmVncyArIEFVRElPX1NSQ19DTkZHKTsKKwl3cml0ZWwo QVVESU9fU1dfUlNULCBkcC0+cmVncyArIEFVRElPX1NSQ19DTlRMKTsKKwl3cml0ZWwoMCwgZHAt PnJlZ3MgKyBBVURJT19TUkNfQ05UTCk7CisKKwkvKiByZXNldCBzbXBsMnBja3QgY29tcG9uZW50 ICAqLworCXdyaXRlbCgwLCBkcC0+cmVncyArIFNNUEwyUEtUX0NOVEwpOworCXdyaXRlbChBVURJ T19TV19SU1QsIGRwLT5yZWdzICsgU01QTDJQS1RfQ05UTCk7CisJd3JpdGVsKDAsIGRwLT5yZWdz ICsgU01QTDJQS1RfQ05UTCk7CisKKwkvKiByZXNldCBGSUZPICovCisJd3JpdGVsKEFVRElPX1NX X1JTVCwgZHAtPnJlZ3MgKyBGSUZPX0NOVEwpOworCXdyaXRlbCgwLCBkcC0+cmVncyArIEZJRk9f Q05UTCk7CisKKwlpZiAoYXVkaW8tPmZvcm1hdCA9PSBBRk1UX1NQRElGKQorCQljbGtfZGlzYWJs ZV91bnByZXBhcmUoZHAtPnNwZGlmX2Nsayk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNkbl9k cF9hdWRpb19tdXRlKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgYm9vbCBlbmFibGUpCit7CisJ aW50IHJldDsKKworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGVfYml0KGRwLCBEUF9WQl9JRCwgNCwg MSwgZW5hYmxlKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKGRwLT5kZXYsICJhdWRpbyBtdXRlIGZh aWxlZDogJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBjZG5f ZHBfYXVkaW9fY29uZmlnX2kycyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsCisJCQkJICAgIHN0 cnVjdCBhdWRpb19pbmZvICphdWRpbykKK3sKKwlpbnQgc3ViX3Bja3RfbnVtID0gMSwgaTJzX3Bv cnRfZW5fdmFsID0gMHhmLCBpOworCXUzMiB2YWw7CisKKwlpZiAoYXVkaW8tPmNoYW5uZWxzID09 IDIpIHsKKwkJaWYgKGRwLT5saW5rLm51bV9sYW5lcyA9PSAxKQorCQkJc3ViX3Bja3RfbnVtID0g MjsKKwkJZWxzZQorCQkJc3ViX3Bja3RfbnVtID0gNDsKKworCQlpMnNfcG9ydF9lbl92YWwgPSAx OworCX0gZWxzZSBpZiAoYXVkaW8tPmNoYW5uZWxzID09IDQpIHsKKwkJaTJzX3BvcnRfZW5fdmFs ID0gMzsKKwl9CisKKwl3cml0ZWwoMHgwLCBkcC0+cmVncyArIFNQRElGX0NUUkxfQUREUik7CisK Kwl3cml0ZWwoU1lOQ19XUl9UT19DSF9aRVJPLCBkcC0+cmVncyArIEZJRk9fQ05UTCk7CisKKwl2 YWwgPSBNQVhfTlVNX0NIKGF1ZGlvLT5jaGFubmVscyk7CisJdmFsIHw9IE5VTV9PRl9JMlNfUE9S VFMoYXVkaW8tPmNoYW5uZWxzKTsKKwl2YWwgfD0gQVVESU9fVFlQRV9MUENNOworCXZhbCB8PSBD RkdfU1VCX1BDS1RfTlVNKHN1Yl9wY2t0X251bSk7CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBT TVBMMlBLVF9DTkZHKTsKKworCWlmIChhdWRpby0+c2FtcGxlX3dpZHRoID09IDE2KQorCQl2YWwg PSAwOworCWVsc2UgaWYgKGF1ZGlvLT5zYW1wbGVfd2lkdGggPT0gMjQpCisJCXZhbCA9IDEgPDwg OTsKKwllbHNlCisJCXZhbCA9IDIgPDwgOTsKKworCXZhbCB8PSBBVURJT19DSF9OVU0oYXVkaW8t PmNoYW5uZWxzKTsKKwl2YWwgfD0gSTJTX0RFQ19QT1JUX0VOKGkyc19wb3J0X2VuX3ZhbCk7CisJ dmFsIHw9IFRSQU5TX1NNUExfV0lEVEhfMzI7CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBBVURJ T19TUkNfQ05GRyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgKGF1ZGlvLT5jaGFubmVscyArIDEpIC8g MjsgaSsrKSB7CisJCWlmIChhdWRpby0+c2FtcGxlX3dpZHRoID09IDE2KQorCQkJdmFsID0gKDB4 MDggPDwgOCkgfCAoMHgwOCA8PCAyMCk7CisJCWVsc2UgaWYgKGF1ZGlvLT5zYW1wbGVfd2lkdGgg PT0gMjQpCisJCQl2YWwgPSAoMHgwYiA8PCA4KSB8ICgweDBiIDw8IDIwKTsKKworCQl2YWwgfD0g KCgyICogaSkgPDwgNCkgfCAoKDIgKiBpICsgMSkgPDwgMTYpOworCQl3cml0ZWwodmFsLCBkcC0+ cmVncyArIFNUVFNfQklUX0NIKGkpKTsKKwl9CisKKwlzd2l0Y2ggKGF1ZGlvLT5zYW1wbGVfcmF0 ZSkgeworCWNhc2UgMzIwMDA6CisJCXZhbCA9IFNBTVBMSU5HX0ZSRVEoMykgfAorCQkgICAgICBP UklHSU5BTF9TQU1QX0ZSRVEoMHhjKTsKKwkJYnJlYWs7CisJY2FzZSA0NDEwMDoKKwkJdmFsID0g U0FNUExJTkdfRlJFUSgwKSB8CisJCSAgICAgIE9SSUdJTkFMX1NBTVBfRlJFUSgweGYpOworCQli cmVhazsKKwljYXNlIDQ4MDAwOgorCQl2YWwgPSBTQU1QTElOR19GUkVRKDIpIHwKKwkJICAgICAg T1JJR0lOQUxfU0FNUF9GUkVRKDB4ZCk7CisJCWJyZWFrOworCWNhc2UgODgyMDA6CisJCXZhbCA9 IFNBTVBMSU5HX0ZSRVEoOCkgfAorCQkgICAgICBPUklHSU5BTF9TQU1QX0ZSRVEoMHg3KTsKKwkJ YnJlYWs7CisJY2FzZSA5NjAwMDoKKwkJdmFsID0gU0FNUExJTkdfRlJFUSgweGEpIHwKKwkJICAg ICAgT1JJR0lOQUxfU0FNUF9GUkVRKDUpOworCQlicmVhazsKKwljYXNlIDE3NjQwMDoKKwkJdmFs ID0gU0FNUExJTkdfRlJFUSgweGMpIHwKKwkJICAgICAgT1JJR0lOQUxfU0FNUF9GUkVRKDMpOwor CQlicmVhazsKKwljYXNlIDE5MjAwMDoKKwkJdmFsID0gU0FNUExJTkdfRlJFUSgweGUpIHwKKwkJ ICAgICAgT1JJR0lOQUxfU0FNUF9GUkVRKDEpOworCQlicmVhazsKKwl9CisJdmFsIHw9IDQ7CisJ d3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBDT01fQ0hfU1RUU19CSVRTKTsKKworCXdyaXRlbChTTVBM MlBLVF9FTiwgZHAtPnJlZ3MgKyBTTVBMMlBLVF9DTlRMKTsKKwl3cml0ZWwoSTJTX0RFQ19TVEFS VCwgZHAtPnJlZ3MgKyBBVURJT19TUkNfQ05UTCk7Cit9CisKK3N0YXRpYyB2b2lkIGNkbl9kcF9h dWRpb19jb25maWdfc3BkaWYoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCXUzMiB2YWw7 CisKKwl2YWwgPSBTUERJRl9BVkdfU0VMIHwgU1BESUZfSklUVEVSX0JZUEFTUzsKKwl2YWwgfD0g U1BESUZfRklGT19NSURfUkFOR0UoMHhlMCk7CisJdmFsIHw9IFNQRElGX0pJVFRFUl9USFJTSCgw eGUwKTsKKwl2YWwgfD0gU1BESUZfSklUVEVSX0FWR19XSU4oNyk7CisJd3JpdGVsKHZhbCwgZHAt PnJlZ3MgKyBTUERJRl9DVFJMX0FERFIpOworCisJd3JpdGVsKFNZTkNfV1JfVE9fQ0hfWkVSTywg ZHAtPnJlZ3MgKyBGSUZPX0NOVEwpOworCisJdmFsID0gTUFYX05VTV9DSCgyKSB8IEFVRElPX1RZ UEVfTFBDTSB8IENGR19TVUJfUENLVF9OVU0oNCk7CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBT TVBMMlBLVF9DTkZHKTsKKwl3cml0ZWwoU01QTDJQS1RfRU4sIGRwLT5yZWdzICsgU01QTDJQS1Rf Q05UTCk7CisKKwl2YWwgPSBTUERJRl9FTkFCTEUgfCBTUERJRl9BVkdfU0VMIHwgU1BESUZfSklU VEVSX0JZUEFTUzsKKwl2YWwgfD0gU1BESUZfRklGT19NSURfUkFOR0UoMHhlMCk7CisJdmFsIHw9 IFNQRElGX0pJVFRFUl9USFJTSCgweGUwKTsKKwl2YWwgfD0gU1BESUZfSklUVEVSX0FWR19XSU4o Nyk7CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBTUERJRl9DVFJMX0FERFIpOworCisJY2xrX3By ZXBhcmVfZW5hYmxlKGRwLT5zcGRpZl9jbGspOworCWNsa19zZXRfcmF0ZShkcC0+c3BkaWZfY2xr LCBDRE5fRFBfU1BESUZfQ0xLKTsKK30KKworaW50IGNkbl9kcF9hdWRpb19jb25maWcoc3RydWN0 IGNkbl9kcF9kZXZpY2UgKmRwLCBzdHJ1Y3QgYXVkaW9faW5mbyAqYXVkaW8pCit7CisJaW50IHJl dDsKKworCS8qIHJlc2V0IHRoZSBzcGRpZiBjbGsgYmVmb3JlIGNvbmZpZyAqLworCWlmIChhdWRp by0+Zm9ybWF0ID09IEFGTVRfU1BESUYpIHsKKwkJcmVzZXRfY29udHJvbF9hc3NlcnQoZHAtPnNw ZGlmX3JzdCk7CisJCXJlc2V0X2NvbnRyb2xfZGVhc3NlcnQoZHAtPnNwZGlmX3JzdCk7CisJfQor CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgQ01fTEFORV9DVFJMLCBMQU5FX1JFRl9DWUMp OworCWlmIChyZXQpCisJCWdvdG8gZXJyX2F1ZGlvX2NvbmZpZzsKKworCXJldCA9IGNkbl9kcF9y ZWdfd3JpdGUoZHAsIENNX0NUUkwsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2F1ZGlvX2Nv bmZpZzsKKworCWlmIChhdWRpby0+Zm9ybWF0ID09IEFGTVRfSTJTKQorCQljZG5fZHBfYXVkaW9f Y29uZmlnX2kycyhkcCwgYXVkaW8pOworCWVsc2UKKwkJY2RuX2RwX2F1ZGlvX2NvbmZpZ19zcGRp ZihkcCk7CisKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBBVURJT19QQUNLX0NPTlRST0ws IEFVRElPX1BBQ0tfRU4pOworCitlcnJfYXVkaW9fY29uZmlnOgorCWlmIChyZXQpCisJCWRldl9l cnIoZHAtPmRldiwgImF1ZGlvIGNvbmZpZyBmYWlsZWQ6ICVkXG4iLCByZXQpOworCXJldHVybiBy ZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLXJlZy5o IGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1yZWcuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi42YWMzNjc0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1yZWcuaApAQCAtMCwwICsxLDQ4MiBAQAorLyoKKyAqIENv cHlyaWdodCAoQykgRnV6aG91IFJvY2tjaGlwIEVsZWN0cm9uaWNzIENvLkx0ZAorICogQXV0aG9y OiBDaHJpcyBaaG9uZyA8enl3QHJvY2stY2hpcHMuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUg aXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAq IExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVk IHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAq IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lm bmRlZiBfQ0ROX0RQX1JFR19ICisjZGVmaW5lIF9DRE5fRFBfUkVHX0gKKworI2luY2x1ZGUgPGxp bnV4L2JpdG9wcy5oPgorCisjZGVmaW5lIEFERFJfSU1FTQkJMHgxMDAwMAorI2RlZmluZSBBRERS X0RNRU0JCTB4MjAwMDAKKworLyogQVBCIENGRyBhZGRyICovCisjZGVmaW5lIEFQQl9DVFJMCQkJ MAorI2RlZmluZSBYVF9JTlRfQ1RSTAkJCTB4MDQKKyNkZWZpbmUgTUFJTEJPWF9GVUxMX0FERFIJ CTB4MDgKKyNkZWZpbmUgTUFJTEJPWF9FTVBUWV9BRERSCQkweDBjCisjZGVmaW5lIE1BSUxCT1gw X1dSX0RBVEEJCTB4MTAKKyNkZWZpbmUgTUFJTEJPWDBfUkRfREFUQQkJMHgxNAorI2RlZmluZSBL RUVQX0FMSVZFCQkJMHgxOAorI2RlZmluZSBWRVJfTAkJCQkweDFjCisjZGVmaW5lIFZFUl9ICQkJ CTB4MjAKKyNkZWZpbmUgVkVSX0xJQl9MX0FERFIJCQkweDI0CisjZGVmaW5lIFZFUl9MSUJfSF9B RERSCQkJMHgyOAorI2RlZmluZSBTV19ERUJVR19MCQkJMHgyYworI2RlZmluZSBTV19ERUJVR19I CQkJMHgzMAorI2RlZmluZSBNQUlMQk9YX0lOVF9NQVNLCQkweDM0CisjZGVmaW5lIE1BSUxCT1hf SU5UX1NUQVRVUwkJMHgzOAorI2RlZmluZSBTV19DTEtfTAkJCTB4M2MKKyNkZWZpbmUgU1dfQ0xL X0gJCQkweDQwCisjZGVmaW5lIFNXX0VWRU5UUzAJCQkweDQ0CisjZGVmaW5lIFNXX0VWRU5UUzEJ CQkweDQ4CisjZGVmaW5lIFNXX0VWRU5UUzIJCQkweDRjCisjZGVmaW5lIFNXX0VWRU5UUzMJCQkw eDUwCisjZGVmaW5lIFhUX09DRF9DVFJMCQkJMHg2MAorI2RlZmluZSBBUEJfSU5UX01BU0sJCQkw eDZjCisjZGVmaW5lIEFQQl9TVEFUVVNfTUFTSwkJCTB4NzAKKworLyogYXVkaW8gZGVjb2RlciBh ZGRyICovCisjZGVmaW5lIEFVRElPX1NSQ19DTlRMCQkJMHgzMDAwMAorI2RlZmluZSBBVURJT19T UkNfQ05GRwkJCTB4MzAwMDQKKyNkZWZpbmUgQ09NX0NIX1NUVFNfQklUUwkJMHgzMDAwOAorI2Rl ZmluZSBTVFRTX0JJVF9DSCh4KQkJCSgweDMwMDBjICsgKCh4KSA8PCAyKSkKKyNkZWZpbmUgU1BE SUZfQ1RSTF9BRERSCQkJMHgzMDA0YworI2RlZmluZSBTUERJRl9DSDFfQ1NfMzEwMF9BRERSCQkw eDMwMDUwCisjZGVmaW5lIFNQRElGX0NIMV9DU182MzMyX0FERFIJCTB4MzAwNTQKKyNkZWZpbmUg U1BESUZfQ0gxX0NTXzk1NjRfQUREUgkJMHgzMDA1OAorI2RlZmluZSBTUERJRl9DSDFfQ1NfMTI3 OTZfQUREUgkJMHgzMDA1YworI2RlZmluZSBTUERJRl9DSDFfQ1NfMTU5MTI4X0FERFIJMHgzMDA2 MAorI2RlZmluZSBTUERJRl9DSDFfQ1NfMTkxMTYwX0FERFIJMHgzMDA2NAorI2RlZmluZSBTUERJ Rl9DSDJfQ1NfMzEwMF9BRERSCQkweDMwMDY4CisjZGVmaW5lIFNQRElGX0NIMl9DU182MzMyX0FE RFIJCTB4MzAwNmMKKyNkZWZpbmUgU1BESUZfQ0gyX0NTXzk1NjRfQUREUgkJMHgzMDA3MAorI2Rl ZmluZSBTUERJRl9DSDJfQ1NfMTI3OTZfQUREUgkJMHgzMDA3NAorI2RlZmluZSBTUERJRl9DSDJf Q1NfMTU5MTI4X0FERFIJMHgzMDA3OAorI2RlZmluZSBTUERJRl9DSDJfQ1NfMTkxMTYwX0FERFIJ MHgzMDA3YworI2RlZmluZSBTTVBMMlBLVF9DTlRMCQkJMHgzMDA4MAorI2RlZmluZSBTTVBMMlBL VF9DTkZHCQkJMHgzMDA4NAorI2RlZmluZSBGSUZPX0NOVEwJCQkweDMwMDg4CisjZGVmaW5lIEZJ Rk9fU1RUUwkJCTB4MzAwOGMKKworLyogc291cmNlIHBpZiBhZGRyICovCisjZGVmaW5lIFNPVVJD RV9QSUZfV1JfQUREUgkJMHgzMDgwMAorI2RlZmluZSBTT1VSQ0VfUElGX1dSX1JFUQkJMHgzMDgw NAorI2RlZmluZSBTT1VSQ0VfUElGX1JEX0FERFIJCTB4MzA4MDgKKyNkZWZpbmUgU09VUkNFX1BJ Rl9SRF9SRVEJCTB4MzA4MGMKKyNkZWZpbmUgU09VUkNFX1BJRl9EQVRBX1dSCQkweDMwODEwCisj ZGVmaW5lIFNPVVJDRV9QSUZfREFUQV9SRAkJMHgzMDgxNAorI2RlZmluZSBTT1VSQ0VfUElGX0ZJ Rk8xX0ZMVVNICQkweDMwODE4CisjZGVmaW5lIFNPVVJDRV9QSUZfRklGTzJfRkxVU0gJCTB4MzA4 MWMKKyNkZWZpbmUgU09VUkNFX1BJRl9TVEFUVVMJCTB4MzA4MjAKKyNkZWZpbmUgU09VUkNFX1BJ Rl9JTlRFUlJVUFRfU09VUkNFCTB4MzA4MjQKKyNkZWZpbmUgU09VUkNFX1BJRl9JTlRFUlJVUFRf TUFTSwkweDMwODI4CisjZGVmaW5lIFNPVVJDRV9QSUZfUEtUX0FMTE9DX1JFRwkweDMwODJjCisj ZGVmaW5lIFNPVVJDRV9QSUZfUEtUX0FMTE9DX1dSX0VOCTB4MzA4MzAKKyNkZWZpbmUgU09VUkNF X1BJRl9TV19SRVNFVAkJMHgzMDgzNAorCisvKiBiZWxsb3cgcmVnaXN0ZXJzIG5lZWQgYWNjZXNz IGJ5IG1haWxib3ggKi8KKy8qIHNvdXJjZSBjYXIgYWRkciAqLworI2RlZmluZSBTT1VSQ0VfSERU WF9DQVIJCQkweDA5MDAKKyNkZWZpbmUgU09VUkNFX0RQVFhfQ0FSCQkJMHgwOTA0CisjZGVmaW5l IFNPVVJDRV9QSFlfQ0FSCQkJMHgwOTA4CisjZGVmaW5lIFNPVVJDRV9DRUNfQ0FSCQkJMHgwOTBj CisjZGVmaW5lIFNPVVJDRV9DQlVTX0NBUgkJCTB4MDkxMAorI2RlZmluZSBTT1VSQ0VfUEtUX0NB UgkJCTB4MDkxOAorI2RlZmluZSBTT1VSQ0VfQUlGX0NBUgkJCTB4MDkxYworI2RlZmluZSBTT1VS Q0VfQ0lQSEVSX0NBUgkJMHgwOTIwCisjZGVmaW5lIFNPVVJDRV9DUllQVE9fQ0FSCQkweDA5MjQK KworLyogY2xvY2sgbWV0ZXJzIGFkZHIgKi8KKyNkZWZpbmUgQ01fQ1RSTAkJCQkweDBhMDAKKyNk ZWZpbmUgQ01fSTJTX0NUUkwJCQkweDBhMDQKKyNkZWZpbmUgQ01fU1BESUZfQ1RSTAkJCTB4MGEw OAorI2RlZmluZSBDTV9WSURfQ1RSTAkJCTB4MGEwYworI2RlZmluZSBDTV9MQU5FX0NUUkwJCQkw eDBhMTAKKyNkZWZpbmUgSTJTX05NX1NUQUJMRQkJCTB4MGExNAorI2RlZmluZSBJMlNfTkNUU19T VEFCTEUJCQkweDBhMTgKKyNkZWZpbmUgU1BESUZfTk1fU1RBQkxFCQkJMHgwYTFjCisjZGVmaW5l IFNQRElGX05DVFNfU1RBQkxFCQkweDBhMjAKKyNkZWZpbmUgTk1WSURfTUVBU19TVEFCTEUJCTB4 MGEyNAorI2RlZmluZSBJMlNfTUVBUwkJCTB4MGE0MAorI2RlZmluZSBTUERJRl9NRUFTCQkJMHgw YTgwCisjZGVmaW5lIE5NVklEX01FQVMJCQkweDBhYzAKKworLyogc291cmNlIHZpZiBhZGRyICov CisjZGVmaW5lIEJORF9IU1lOQzJWU1lOQwkJCTB4MGIwMAorI2RlZmluZSBIU1lOQzJWU1lOQ19G MV9MMQkJMHgwYjA0CisjZGVmaW5lIEhTWU5DMlZTWU5DX0YyX0wxCQkweDBiMDgKKyNkZWZpbmUg SFNZTkMyVlNZTkNfU1RBVFVTCQkweDBiMGMKKyNkZWZpbmUgSFNZTkMyVlNZTkNfUE9MX0NUUkwJ CTB4MGIxMAorCisvKiBkcHR4IHBoeSBhZGRyICovCisjZGVmaW5lIERQX1RYX1BIWV9DT05GSUdf UkVHCQkweDIwMDAKKyNkZWZpbmUgRFBfVFhfUEhZX1NUQVRVU19SRUcJCTB4MjAwNAorI2RlZmlu ZSBEUF9UWF9QSFlfU1dfUkVTRVQJCTB4MjAwOAorI2RlZmluZSBEUF9UWF9QSFlfU0NSQU1CTEVS X1NFRUQJMHgyMDBjCisjZGVmaW5lIERQX1RYX1BIWV9UUkFJTklOR18wMV8wNAkweDIwMTAKKyNk ZWZpbmUgRFBfVFhfUEhZX1RSQUlOSU5HXzA1XzA4CTB4MjAxNAorI2RlZmluZSBEUF9UWF9QSFlf VFJBSU5JTkdfMDlfMTAJMHgyMDE4CisjZGVmaW5lIFRFU1RfQ09SCQkJMHgyM2ZjCisKKy8qIGRw dHggaHBkIGFkZHIgKi8KKyNkZWZpbmUgSFBEX0lSUV9ERVRfTUlOX1RJTUVSCQkweDIxMDAKKyNk ZWZpbmUgSFBEX0lSUV9ERVRfTUFYX1RJTUVSCQkweDIxMDQKKyNkZWZpbmUgSFBEX1VOUExHRURf REVUX01JTl9USU1FUgkweDIxMDgKKyNkZWZpbmUgSFBEX1NUQUJMRV9USU1FUgkJMHgyMTBjCisj ZGVmaW5lIEhQRF9GSUxURVJfVElNRVIJCTB4MjExMAorI2RlZmluZSBIUERfRVZFTlRfTUFTSwkJ CTB4MjExYworI2RlZmluZSBIUERfRVZFTlRfREVUCQkJMHgyMTIwCisKKy8qIGRweXggZnJhbWVy IGFkZHIgKi8KKyNkZWZpbmUgRFBfRlJBTUVSX0dMT0JBTF9DT05GSUcJCTB4MjIwMAorI2RlZmlu ZSBEUF9TV19SRVNFVAkJCTB4MjIwNAorI2RlZmluZSBEUF9GUkFNRVJfVFUJCQkweDIyMDgKKyNk ZWZpbmUgRFBfRlJBTUVSX1BYTF9SRVBSCQkweDIyMGMKKyNkZWZpbmUgRFBfRlJBTUVSX1NQCQkJ MHgyMjEwCisjZGVmaW5lIEFVRElPX1BBQ0tfQ09OVFJPTAkJMHgyMjE0CisjZGVmaW5lIERQX1ZD X1RBQkxFKHgpCQkJKDB4MjIxOCArICgoeCkgPDwgMikpCisjZGVmaW5lIERQX1ZCX0lECQkJMHgy MjU4CisjZGVmaW5lIERQX01UUEhfTFZQX0NPTlRST0wJCTB4MjI1YworI2RlZmluZSBEUF9NVFBI X1NZTUJPTF9WQUxVRVMJCTB4MjI2MAorI2RlZmluZSBEUF9NVFBIX0VDRl9DT05UUk9MCQkweDIy NjQKKyNkZWZpbmUgRFBfTVRQSF9BQ1RfQ09OVFJPTAkJMHgyMjY4CisjZGVmaW5lIERQX01UUEhf U1RBVFVTCQkJMHgyMjZjCisjZGVmaW5lIERQX0lOVEVSUlVQVF9TT1VSQ0UJCTB4MjI3MAorI2Rl ZmluZSBEUF9JTlRFUlJVUFRfTUFTSwkJMHgyMjc0CisjZGVmaW5lIERQX0ZST05UX0JBQ0tfUE9S Q0gJCTB4MjI3OAorI2RlZmluZSBEUF9CWVRFX0NPVU5UCQkJMHgyMjdjCisKKy8qIGRwdHggc3Ry ZWFtIGFkZHIgKi8KKyNkZWZpbmUgTVNBX0hPUklaT05UQUxfMAkJMHgyMjgwCisjZGVmaW5lIE1T QV9IT1JJWk9OVEFMXzEJCTB4MjI4NAorI2RlZmluZSBNU0FfVkVSVElDQUxfMAkJCTB4MjI4OAor I2RlZmluZSBNU0FfVkVSVElDQUxfMQkJCTB4MjI4YworI2RlZmluZSBNU0FfTUlTQwkJCTB4MjI5 MAorI2RlZmluZSBTVFJFQU1fQ09ORklHCQkJMHgyMjk0CisjZGVmaW5lIEFVRElPX1BBQ0tfU1RB VFVTCQkweDIyOTgKKyNkZWZpbmUgVklGX1NUQVRVUwkJCTB4MjI5YworI2RlZmluZSBQQ0tfU1RV RkZfU1RBVFVTXzAJCTB4MjJhMAorI2RlZmluZSBQQ0tfU1RVRkZfU1RBVFVTXzEJCTB4MjJhNAor I2RlZmluZSBJTkZPX1BBQ0tfU1RBVFVTCQkweDIyYTgKKyNkZWZpbmUgUkFURV9HT1ZFUk5PUl9T VEFUVVMJCTB4MjJhYworI2RlZmluZSBEUF9IT1JJWk9OVEFMCQkJMHgyMmIwCisjZGVmaW5lIERQ X1ZFUlRJQ0FMXzAJCQkweDIyYjQKKyNkZWZpbmUgRFBfVkVSVElDQUxfMQkJCTB4MjJiOAorI2Rl ZmluZSBEUF9CTE9DS19TRFAJCQkweDIyYmMKKworLyogZHB0eCBnbGJsIGFkZHIgKi8KKyNkZWZp bmUgRFBUWF9MQU5FX0VOCQkJMHgyMzAwCisjZGVmaW5lIERQVFhfRU5ITkNECQkJMHgyMzA0Cisj ZGVmaW5lIERQVFhfSU5UX01BU0sJCQkweDIzMDgKKyNkZWZpbmUgRFBUWF9JTlRfU1RBVFVTCQkJ MHgyMzBjCisKKy8qIGRwIGF1eCBhZGRyICovCisjZGVmaW5lIERQX0FVWF9IT1NUX0NPTlRST0wJ CTB4MjgwMAorI2RlZmluZSBEUF9BVVhfSU5URVJSVVBUX1NPVVJDRQkJMHgyODA0CisjZGVmaW5l IERQX0FVWF9JTlRFUlJVUFRfTUFTSwkJMHgyODA4CisjZGVmaW5lIERQX0FVWF9TV0FQX0lOVkVS U0lPTl9DT05UUk9MCTB4MjgwYworI2RlZmluZSBEUF9BVVhfU0VORF9OQUNLX1RSQU5TQUNUSU9O CTB4MjgxMAorI2RlZmluZSBEUF9BVVhfQ0xFQVJfUlgJCQkweDI4MTQKKyNkZWZpbmUgRFBfQVVY X0NMRUFSX1RYCQkJMHgyODE4CisjZGVmaW5lIERQX0FVWF9USU1FUl9TVE9QCQkweDI4MWMKKyNk ZWZpbmUgRFBfQVVYX1RJTUVSX0NMRUFSCQkweDI4MjAKKyNkZWZpbmUgRFBfQVVYX1JFU0VUX1NX CQkJMHgyODI0CisjZGVmaW5lIERQX0FVWF9ESVZJREVfMk0JCTB4MjgyOAorI2RlZmluZSBEUF9B VVhfVFhfUFJFQUNIQVJHRV9MRU5HVEgJMHgyODJjCisjZGVmaW5lIERQX0FVWF9GUkVRVUVOQ1lf MU1fTUFYCQkweDI4MzAKKyNkZWZpbmUgRFBfQVVYX0ZSRVFVRU5DWV8xTV9NSU4JCTB4MjgzNAor I2RlZmluZSBEUF9BVVhfUlhfUFJFX01JTgkJMHgyODM4CisjZGVmaW5lIERQX0FVWF9SWF9QUkVf TUFYCQkweDI4M2MKKyNkZWZpbmUgRFBfQVVYX1RJTUVSX1BSRVNFVAkJMHgyODQwCisjZGVmaW5l IERQX0FVWF9OQUNLX0ZPUk1BVAkJMHgyODQ0CisjZGVmaW5lIERQX0FVWF9UWF9EQVRBCQkJMHgy ODQ4CisjZGVmaW5lIERQX0FVWF9SWF9EQVRBCQkJMHgyODRjCisjZGVmaW5lIERQX0FVWF9UWF9T VEFUVVMJCTB4Mjg1MAorI2RlZmluZSBEUF9BVVhfUlhfU1RBVFVTCQkweDI4NTQKKyNkZWZpbmUg RFBfQVVYX1JYX0NZQ0xFX0NPVU5URVIJCTB4Mjg1OAorI2RlZmluZSBEUF9BVVhfTUFJTl9TVEFU RVMJCTB4Mjg1YworI2RlZmluZSBEUF9BVVhfTUFJTl9USU1FUgkJMHgyODYwCisjZGVmaW5lIERQ X0FVWF9BRkVfT1VUCQkJMHgyODY0CisKKy8qIGNyeXB0byBhZGRyICovCisjZGVmaW5lIENSWVBU T19IRENQX1JFVklTSU9OCQkweDU4MDAKKyNkZWZpbmUgSERDUF9DUllQVE9fQ09ORklHCQkweDU4 MDQKKyNkZWZpbmUgQ1JZUFRPX0lOVEVSUlVQVF9TT1VSQ0UJCTB4NTgwOAorI2RlZmluZSBDUllQ VE9fSU5URVJSVVBUX01BU0sJCTB4NTgwYworI2RlZmluZSBDUllQVE8yMl9DT05GSUcJCQkweDU4 MTgKKyNkZWZpbmUgQ1JZUFRPMjJfU1RBVFVTCQkJMHg1ODFjCisjZGVmaW5lIFNIQV8yNTZfREFU QV9JTgkJCTB4NTgzYworI2RlZmluZSBTSEFfMjU2X0RBVEFfT1VUXyh4KQkJKDB4NTg1MCArICgo eCkgPDwgMikpCisjZGVmaW5lIEFFU18zMl9LRVlfKHgpCQkJKDB4NTg3MCArICgoeCkgPDwgMikp CisjZGVmaW5lIEFFU18zMl9EQVRBX0lOCQkJMHg1ODgwCisjZGVmaW5lIEFFU18zMl9EQVRBX09V VF8oeCkJCSgweDU4ODQgKyAoKHgpIDw8IDIpKQorI2RlZmluZSBDUllQVE8xNF9DT05GSUcJCQkw eDU4YTAKKyNkZWZpbmUgQ1JZUFRPMTRfU1RBVFVTCQkJMHg1OGE0CisjZGVmaW5lIENSWVBUTzE0 X1BSTk1fT1VUCQkweDU4YTgKKyNkZWZpbmUgQ1JZUFRPMTRfS01fMAkJCTB4NThhYworI2RlZmlu ZSBDUllQVE8xNF9LTV8xCQkJMHg1OGIwCisjZGVmaW5lIENSWVBUTzE0X0FOXzAJCQkweDU4YjQK KyNkZWZpbmUgQ1JZUFRPMTRfQU5fMQkJCTB4NThiOAorI2RlZmluZSBDUllQVE8xNF9ZT1VSX0tT Vl8wCQkweDU4YmMKKyNkZWZpbmUgQ1JZUFRPMTRfWU9VUl9LU1ZfMQkJMHg1OGMwCisjZGVmaW5l IENSWVBUTzE0X01JXzAJCQkweDU4YzQKKyNkZWZpbmUgQ1JZUFRPMTRfTUlfMQkJCTB4NThjOAor I2RlZmluZSBDUllQVE8xNF9USV8wCQkJMHg1OGNjCisjZGVmaW5lIENSWVBUTzE0X0tJXzAJCQkw eDU4ZDAKKyNkZWZpbmUgQ1JZUFRPMTRfS0lfMQkJCTB4NThkNAorI2RlZmluZSBDUllQVE8xNF9C TE9DS1NfTlVNCQkweDU4ZDgKKyNkZWZpbmUgQ1JZUFRPMTRfS0VZX01FTV9EQVRBXzAJCTB4NThk YworI2RlZmluZSBDUllQVE8xNF9LRVlfTUVNX0RBVEFfMQkJMHg1OGUwCisjZGVmaW5lIENSWVBU TzE0X1NIQTFfTVNHX0RBVEEJCTB4NThlNAorI2RlZmluZSBDUllQVE8xNF9TSEExX1ZfVkFMVUVf KHgpCSgweDU4ZTggKyAoKHgpIDw8IDIpKQorI2RlZmluZSBUUk5HX0NUUkwJCQkweDU4ZmMKKyNk ZWZpbmUgVFJOR19EQVRBX1JEWQkJCTB4NTkwMAorI2RlZmluZSBUUk5HX0RBVEEJCQkweDU5MDQK KworLyogY2lwaGVyIGFkZHIgKi8KKyNkZWZpbmUgSERDUF9SRVZJU0lPTgkJCTB4NjAwMDAKKyNk ZWZpbmUgSU5URVJSVVBUX1NPVVJDRQkJMHg2MDAwNAorI2RlZmluZSBJTlRFUlJVUFRfTUFTSwkJ CTB4NjAwMDgKKyNkZWZpbmUgSERDUF9DSVBIRVJfQ09ORklHCQkweDYwMDBjCisjZGVmaW5lIEFF U18xMjhfS0VZXzAJCQkweDYwMDEwCisjZGVmaW5lIEFFU18xMjhfS0VZXzEJCQkweDYwMDE0Cisj ZGVmaW5lIEFFU18xMjhfS0VZXzIJCQkweDYwMDE4CisjZGVmaW5lIEFFU18xMjhfS0VZXzMJCQkw eDYwMDFjCisjZGVmaW5lIEFFU18xMjhfUkFORE9NXzAJCTB4NjAwMjAKKyNkZWZpbmUgQUVTXzEy OF9SQU5ET01fMQkJMHg2MDAyNAorI2RlZmluZSBDSVBIRVIxNF9LTV8wCQkJMHg2MDAyOAorI2Rl ZmluZSBDSVBIRVIxNF9LTV8xCQkJMHg2MDAyYworI2RlZmluZSBDSVBIRVIxNF9TVEFUVVMJCQkw eDYwMDMwCisjZGVmaW5lIENJUEhFUjE0X1JJX1BKX1NUQVRVUwkJMHg2MDAzNAorI2RlZmluZSBD SVBIRVJfTU9ERQkJCTB4NjAwMzgKKyNkZWZpbmUgQ0lQSEVSMTRfQU5fMAkJCTB4NjAwM2MKKyNk ZWZpbmUgQ0lQSEVSMTRfQU5fMQkJCTB4NjAwNDAKKyNkZWZpbmUgQ0lQSEVSMjJfQVVUSAkJCTB4 NjAwNDQKKyNkZWZpbmUgQ0lQSEVSMTRfUjBfRFBfU1RBVFVTCQkweDYwMDQ4CisjZGVmaW5lIENJ UEhFUjE0X0JPT1RTVFJBUAkJMHg2MDA0YworCisjZGVmaW5lIERQVFhfRlJNUl9EQVRBX0NMS19S U1ROX0VOCUJJVCgxMSkKKyNkZWZpbmUgRFBUWF9GUk1SX0RBVEFfQ0xLX0VOCQlCSVQoMTApCisj ZGVmaW5lIERQVFhfUEhZX0RBVEFfUlNUTl9FTgkJQklUKDkpCisjZGVmaW5lIERQVFhfUEhZX0RB VEFfQ0xLX0VOCQlCSVQoOCkKKyNkZWZpbmUgRFBUWF9QSFlfQ0hBUl9SU1ROX0VOCQlCSVQoNykK KyNkZWZpbmUgRFBUWF9QSFlfQ0hBUl9DTEtfRU4JCUJJVCg2KQorI2RlZmluZSBTT1VSQ0VfQVVY X1NZU19DTEtfUlNUTl9FTglCSVQoNSkKKyNkZWZpbmUgU09VUkNFX0FVWF9TWVNfQ0xLX0VOCQlC SVQoNCkKKyNkZWZpbmUgRFBUWF9TWVNfQ0xLX1JTVE5fRU4JCUJJVCgzKQorI2RlZmluZSBEUFRY X1NZU19DTEtfRU4JCQlCSVQoMikKKyNkZWZpbmUgQ0ZHX0RQVFhfVklGX0NMS19SU1ROX0VOCUJJ VCgxKQorI2RlZmluZSBDRkdfRFBUWF9WSUZfQ0xLX0VOCQlCSVQoMCkKKworI2RlZmluZSBTT1VS Q0VfUEhZX1JTVE5fRU4JCUJJVCgxKQorI2RlZmluZSBTT1VSQ0VfUEhZX0NMS19FTgkJQklUKDAp CisKKyNkZWZpbmUgU09VUkNFX1BLVF9TWVNfUlNUTl9FTgkJQklUKDMpCisjZGVmaW5lIFNPVVJD RV9QS1RfU1lTX0NMS19FTgkJQklUKDIpCisjZGVmaW5lIFNPVVJDRV9QS1RfREFUQV9SU1ROX0VO CQlCSVQoMSkKKyNkZWZpbmUgU09VUkNFX1BLVF9EQVRBX0NMS19FTgkJQklUKDApCisKKyNkZWZp bmUgU1BESUZfQ0RSX0NMS19SU1ROX0VOCQlCSVQoNSkKKyNkZWZpbmUgU1BESUZfQ0RSX0NMS19F TgkJQklUKDQpCisjZGVmaW5lIFNPVVJDRV9BSUZfU1lTX1JTVE5fRU4JCUJJVCgzKQorI2RlZmlu ZSBTT1VSQ0VfQUlGX1NZU19DTEtfRU4JCUJJVCgyKQorI2RlZmluZSBTT1VSQ0VfQUlGX0NMS19S U1ROX0VOCQlCSVQoMSkKKyNkZWZpbmUgU09VUkNFX0FJRl9DTEtfRU4JCUJJVCgwKQorCisjZGVm aW5lIFNPVVJDRV9DSVBIRVJfU1lTVEVNX0NMS19SU1ROX0VOCUJJVCgzKQorI2RlZmluZSBTT1VS Q0VfQ0lQSEVSX1NZU19DTEtfRU4JCUJJVCgyKQorI2RlZmluZSBTT1VSQ0VfQ0lQSEVSX0NIQVJf Q0xLX1JTVE5fRU4JCUJJVCgxKQorI2RlZmluZSBTT1VSQ0VfQ0lQSEVSX0NIQVJfQ0xLX0VOCQlC SVQoMCkKKworI2RlZmluZSBTT1VSQ0VfQ1JZUFRPX1NZU19DTEtfUlNUTl9FTglCSVQoMSkKKyNk ZWZpbmUgU09VUkNFX0NSWVBUT19TWVNfQ0xLX0VOCUJJVCgwKQorCisjZGVmaW5lIEFQQl9JUkFN X1BBVEgJCQlCSVQoMikKKyNkZWZpbmUgQVBCX0RSQU1fUEFUSAkJCUJJVCgxKQorI2RlZmluZSBB UEJfWFRfUkVTRVQJCQlCSVQoMCkKKworI2RlZmluZSBNQUlMQk9YX0lOVF9NQVNLX0JJVAkJQklU KDEpCisjZGVmaW5lIFBJRl9JTlRfTUFTS19CSVQJCUJJVCgwKQorI2RlZmluZSBBTExfSU5UX01B U0sJCQkzCisKKy8qIG1haWxib3ggKi8KKyNkZWZpbmUgTUJfT1BDT0RFX0lECQkJMAorI2RlZmlu ZSBNQl9NT0RVTEVfSUQJCQkxCisjZGVmaW5lIE1CX1NJWkVfTVNCX0lECQkJMgorI2RlZmluZSBN Ql9TSVpFX0xTQl9JRAkJCTMKKyNkZWZpbmUgTUJfREFUQV9JRAkJCTQKKworI2RlZmluZSBNQl9N T0RVTEVfSURfRFBfVFgJCTB4MDEKKyNkZWZpbmUgTUJfTU9EVUxFX0lEX0hEQ1BfVFgJCTB4MDcK KyNkZWZpbmUgTUJfTU9EVUxFX0lEX0hEQ1BfUlgJCTB4MDgKKyNkZWZpbmUgTUJfTU9EVUxFX0lE X0hEQ1BfR0VORVJBTAkweDA5CisjZGVmaW5lIE1CX01PRFVMRV9JRF9HRU5FUkFMCQkweDBhCisK Ky8qIGdlbmVyYWwgb3Bjb2RlICovCisjZGVmaW5lIEdFTkVSQUxfTUFJTl9DT05UUk9MICAgICAg ICAgICAgMHgwMQorI2RlZmluZSBHRU5FUkFMX1RFU1RfRUNITyAgICAgICAgICAgICAgIDB4MDIK KyNkZWZpbmUgR0VORVJBTF9CVVNfU0VUVElOR1MgICAgICAgICAgICAweDAzCisjZGVmaW5lIEdF TkVSQUxfVEVTVF9BQ0NFU1MgICAgICAgICAgICAgMHgwNAorCisjZGVmaW5lIERQVFhfU0VUX1BP V0VSX01ORwkJCTB4MDAKKyNkZWZpbmUgRFBUWF9TRVRfSE9TVF9DQVBBQklMSVRJRVMJCTB4MDEK KyNkZWZpbmUgRFBUWF9HRVRfRURJRAkJCQkweDAyCisjZGVmaW5lIERQVFhfUkVBRF9EUENECQkJ CTB4MDMKKyNkZWZpbmUgRFBUWF9XUklURV9EUENECQkJCTB4MDQKKyNkZWZpbmUgRFBUWF9FTkFC TEVfRVZFTlQJCQkweDA1CisjZGVmaW5lIERQVFhfV1JJVEVfUkVHSVNURVIJCQkweDA2CisjZGVm aW5lIERQVFhfUkVBRF9SRUdJU1RFUgkJCTB4MDcKKyNkZWZpbmUgRFBUWF9XUklURV9GSUVMRAkJ CTB4MDgKKyNkZWZpbmUgRFBUWF9UUkFJTklOR19DT05UUk9MCQkJMHgwOQorI2RlZmluZSBEUFRY X1JFQURfRVZFTlQJCQkJMHgwYQorI2RlZmluZSBEUFRYX1JFQURfTElOS19TVEFUCQkJMHgwYgor I2RlZmluZSBEUFRYX1NFVF9WSURFTwkJCQkweDBjCisjZGVmaW5lIERQVFhfU0VUX0FVRElPCQkJ CTB4MGQKKyNkZWZpbmUgRFBUWF9HRVRfTEFTVF9BVVhfU1RBVVMJCQkweDBlCisjZGVmaW5lIERQ VFhfU0VUX0xJTktfQlJFQUtfUE9JTlQJCTB4MGYKKyNkZWZpbmUgRFBUWF9GT1JDRV9MQU5FUwkJ CTB4MTAKKyNkZWZpbmUgRFBUWF9IUERfU1RBVEUJCQkJMHgxMQorCisjZGVmaW5lIEZXX1NUQU5E QlkJCQkJMAorI2RlZmluZSBGV19BQ1RJVkUJCQkJMQorCisjZGVmaW5lIERQVFhfRVZFTlRfRU5B QkxFX0hQRAkJCUJJVCgwKQorI2RlZmluZSBEUFRYX0VWRU5UX0VOQUJMRV9UUkFJTklORwkJQklU KDEpCisKKyNkZWZpbmUgTElOS19UUkFJTklOR19OT1RfQUNUSVZFCQkwCisjZGVmaW5lIExJTktf VFJBSU5JTkdfUlVOCQkJMQorI2RlZmluZSBMSU5LX1RSQUlOSU5HX1JFU1RBUlQJCQkyCisKKyNk ZWZpbmUgQ09OVFJPTF9WSURFT19JRExFCQkJMAorI2RlZmluZSBDT05UUk9MX1ZJREVPX1ZBTElE CQkJMQorCisjZGVmaW5lIFZJRl9CWVBBU1NfSU5URVJMQUNFCQkJQklUKDEzKQorI2RlZmluZSBJ TlRFUkxBQ0VfRk1UX0RFVAkJCUJJVCgxMikKKyNkZWZpbmUgSU5URVJMQUNFX0RUQ1RfV0lOCQkJ MHgyMAorCisjZGVmaW5lIERQX0ZSQU1FUl9TUF9JTlRFUkxBQ0VfRU4JCUJJVCgyKQorI2RlZmlu ZSBEUF9GUkFNRVJfU1BfSFNQCQkJQklUKDEpCisjZGVmaW5lIERQX0ZSQU1FUl9TUF9WU1AJCQlC SVQoMCkKKworLyogY2FwYWJpbGl0eSAqLworI2RlZmluZSBBVVhfSE9TVF9JTlZFUlQJCQkJMwor I2RlZmluZQlGQVNUX0xUX1NVUFBPUlQJCQkJMQorI2RlZmluZSBGQVNUX0xUX05PVF9TVVBQT1JU CQkJMAorI2RlZmluZSBMQU5FX01BUFBJTkdfTk9STUFMCQkJMHgxYgorI2RlZmluZSBMQU5FX01B UFBJTkdfRkxJUFBFRAkJCTB4ZTQKKyNkZWZpbmUgRU5IQU5DRUQJCQkJMQorCisjZGVmaW5lCUZV TExfTFRfU1RBUlRFRAkJCQlCSVQoMCkKKyNkZWZpbmUgRkFTRV9MVF9TVEFSVEVECQkJCUJJVCgx KQorI2RlZmluZSBDTEtfUkVDT1ZFUllfRklOSVNIRUQJCQlCSVQoMikKKyNkZWZpbmUgRVFfUEhB U0VfRklOSVNIRUQJCQlCSVQoMykKKyNkZWZpbmUgRkFTRV9MVF9TVEFSVF9GSU5JU0hFRAkJCUJJ VCg0KQorI2RlZmluZSBDTEtfUkVDT1ZFUllfRkFJTEVECQkJQklUKDUpCisjZGVmaW5lIEVRX1BI QVNFX0ZBSUxFRAkJCQlCSVQoNikKKyNkZWZpbmUgRkFTRV9MVF9GQUlMRUQJCQkJQklUKDcpCisK KyNkZWZpbmUgRFBUWF9IUERfRVZFTlQJCQkJQklUKDApCisjZGVmaW5lIERQVFhfVFJBSU5JTkdf RVZFTlQJCQlCSVQoMSkKKyNkZWZpbmUgSERDUF9UWF9TVEFUVVNfRVZFTlQJCQlCSVQoNCkKKyNk ZWZpbmUgSERDUDJfVFhfSVNfS01fU1RPUkVEX0VWRU5UCQlCSVQoNSkKKyNkZWZpbmUgSERDUDJf VFhfU1RPUkVfS01fRVZFTlQJCQlCSVQoNikKKyNkZWZpbmUgSERDUF9UWF9JU19SRUNFSVZFUl9J RF9WQUxJRF9FVkVOVAlCSVQoNykKKworI2RlZmluZSBUVV9TSVpFCQkJCQkzMAorI2RlZmluZSBD RE5fRFBfTUFYX0xJTktfUkFURQkJCURQX0xJTktfQldfNV80CisKKy8qIGF1ZGlvICovCisjZGVm aW5lIEFVRElPX1BBQ0tfRU4JCQkJQklUKDgpCisjZGVmaW5lIFNBTVBMSU5HX0ZSRVEoeCkJCQko KCh4KSAmIDB4ZikgPDwgMTYpCisjZGVmaW5lIE9SSUdJTkFMX1NBTVBfRlJFUSh4KQkJCSgoKHgp ICYgMHhmKSA8PCAyNCkKKyNkZWZpbmUgU1lOQ19XUl9UT19DSF9aRVJPCQkJQklUKDEpCisjZGVm aW5lIEkyU19ERUNfU1RBUlQJCQkJQklUKDEpCisjZGVmaW5lIEFVRElPX1NXX1JTVAkJCQlCSVQo MCkKKyNkZWZpbmUgU01QTDJQS1RfRU4JCQkJQklUKDEpCisjZGVmaW5lIE1BWF9OVU1fQ0goeCkJ CQkJKCgoeCkgJiAweDFmKSAtIDEpCisjZGVmaW5lIE5VTV9PRl9JMlNfUE9SVFMoeCkJCQkoKCgo eCkgLyAyIC0gMSkgJiAweDMpIDw8IDUpCisjZGVmaW5lIEFVRElPX1RZUEVfTFBDTQkJCQkoMiA8 PCA3KQorI2RlZmluZSBDRkdfU1VCX1BDS1RfTlVNKHgpCQkJKCgoKHgpIC0gMSkgJiAweDcpIDw8 IDExKQorI2RlZmluZSBBVURJT19DSF9OVU0oeCkJCQkJKCgoKHgpIC0gMSkgJiAweDFmKSA8PCAy KQorI2RlZmluZSBUUkFOU19TTVBMX1dJRFRIXzE2CQkJMAorI2RlZmluZSBUUkFOU19TTVBMX1dJ RFRIXzI0CQkJQklUKDExKQorI2RlZmluZSBUUkFOU19TTVBMX1dJRFRIXzMyCQkJKDIgPDwgMTEp CisjZGVmaW5lIEkyU19ERUNfUE9SVF9FTih4KQkJCSgoKHgpICYgMHhmKSA8PCAxNykKKyNkZWZp bmUgU1BESUZfRU5BQkxFCQkJCUJJVCgyMSkKKyNkZWZpbmUgU1BESUZfQVZHX1NFTAkJCQlCSVQo MjApCisjZGVmaW5lIFNQRElGX0pJVFRFUl9CWVBBU1MJCQlCSVQoMTkpCisjZGVmaW5lIFNQRElG X0ZJRk9fTUlEX1JBTkdFKHgpCQkJKCgoeCkgJiAweGZmKSA8PCAxMSkKKyNkZWZpbmUgU1BESUZf SklUVEVSX1RIUlNIKHgpCQkJKCgoeCkgJiAweGZmKSA8PCAzKQorI2RlZmluZSBTUERJRl9KSVRU RVJfQVZHX1dJTih4KQkJCSgoeCkgJiAweDcpCisKKy8qIFJlZmVybmNlIGN5Y2xlcyB3aGVuIHVz aW5nIGxhbmUgY2xvY2sgYXMgcmVmZXJuY2UgKi8KKyNkZWZpbmUgTEFORV9SRUZfQ1lDCQkJCTB4 ODAwMAorCitlbnVtIHZvbHRhZ2Vfc3dpbmdfbGV2ZWwgeworCVZPTFRBR0VfTEVWRUxfMCwKKwlW T0xUQUdFX0xFVkVMXzEsCisJVk9MVEFHRV9MRVZFTF8yLAorCVZPTFRBR0VfTEVWRUxfMywKK307 CisKK2VudW0gcHJlX2VtcGhhc2lzX2xldmVsIHsKKwlQUkVfRU1QSEFTSVNfTEVWRUxfMCwKKwlQ UkVfRU1QSEFTSVNfTEVWRUxfMSwKKwlQUkVfRU1QSEFTSVNfTEVWRUxfMiwKKwlQUkVfRU1QSEFT SVNfTEVWRUxfMywKK307CisKK2VudW0gcGF0dGVybl9zZXQgeworCVBUUzEJCT0gQklUKDApLAor CVBUUzIJCT0gQklUKDEpLAorCVBUUzMJCT0gQklUKDIpLAorCVBUUzQJCT0gQklUKDMpLAorCURQ X05PTkUJCT0gQklUKDQpCit9OworCitlbnVtIHZpY19jb2xvcl9kZXB0aCB7CisJQkNTXzYgPSAw eDEsCisJQkNTXzggPSAweDIsCisJQkNTXzEwID0gMHg0LAorCUJDU18xMiA9IDB4OCwKKwlCQ1Nf MTYgPSAweDEwLAorfTsKKworZW51bSB2aWNfYnRfdHlwZSB7CisJQlRfNjAxID0gMHgwLAorCUJU XzcwOSA9IDB4MSwKK307CisKK3ZvaWQgY2RuX2RwX2Nsb2NrX3Jlc2V0KHN0cnVjdCBjZG5fZHBf ZGV2aWNlICpkcCk7CisKK3ZvaWQgY2RuX2RwX3NldF9md19jbGsoc3RydWN0IGNkbl9kcF9kZXZp Y2UgKmRwLCB1MzIgY2xrKTsKK2ludCBjZG5fZHBfbG9hZF9maXJtd2FyZShzdHJ1Y3QgY2RuX2Rw X2RldmljZSAqZHAsIGNvbnN0IHUzMiAqaV9tZW0sCisJCQkgdTMyIGlfc2l6ZSwgY29uc3QgdTMy ICpkX21lbSwgdTMyIGRfc2l6ZSk7CitpbnQgY2RuX2RwX3NldF9maXJtd2FyZV9hY3RpdmUoc3Ry dWN0IGNkbl9kcF9kZXZpY2UgKmRwLCBib29sIGVuYWJsZSk7CitpbnQgY2RuX2RwX3NldF9ob3N0 X2NhcChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHU4IGxhbmVzLCBib29sIGZsaXApOworaW50 IGNkbl9kcF9ldmVudF9jb25maWcoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKTsKK3UzMiBjZG5f ZHBfZ2V0X2V2ZW50KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCk7CitpbnQgY2RuX2RwX2dldF9o cGRfc3RhdHVzKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCk7CitpbnQgY2RuX2RwX2RwY2Rfd3Jp dGUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1MzIgYWRkciwgdTggdmFsdWUpOworaW50IGNk bl9kcF9kcGNkX3JlYWQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1MzIgYWRkciwgdTggKmRh dGEsIHUxNiBsZW4pOworaW50IGNkbl9kcF9nZXRfZWRpZF9ibG9jayh2b2lkICpkcCwgdTggKmVk aWQsCisJCQkgIHVuc2lnbmVkIGludCBibG9jaywgc2l6ZV90IGxlbmd0aCk7CitpbnQgY2RuX2Rw X3RyYWluaW5nX3N0YXJ0KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCk7CitpbnQgY2RuX2RwX2dl dF90cmFpbmluZ19zdGF0dXMoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKTsKK2ludCBjZG5fZHBf c2V0X3ZpZGVvX3N0YXR1cyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIGludCBhY3RpdmUpOwor aW50IGNkbl9kcF9jb25maWdfdmlkZW8oc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKTsKK2ludCBj ZG5fZHBfYXVkaW9fc3RvcChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHN0cnVjdCBhdWRpb19p bmZvICphdWRpbyk7CitpbnQgY2RuX2RwX2F1ZGlvX211dGUoc3RydWN0IGNkbl9kcF9kZXZpY2Ug KmRwLCBib29sIGVuYWJsZSk7CitpbnQgY2RuX2RwX2F1ZGlvX2NvbmZpZyhzdHJ1Y3QgY2RuX2Rw X2RldmljZSAqZHAsIHN0cnVjdCBhdWRpb19pbmZvICphdWRpbyk7CisjZW5kaWYgLyogX0NETl9E UF9SRUdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlw X2RybV92b3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmMK aW5kZXggM2I4ZTNiNi4uNmE5NGU3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tj aGlwL3JvY2tjaGlwX2RybV92b3AuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9j a2NoaXBfZHJtX3ZvcC5jCkBAIC0xMDY0LDkgKzEwNjQsMTEgQEAgc3RhdGljIHZvaWQgdm9wX2Ny dGNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAkJdm9wX2RzcF9ob2xkX3ZhbGlkX2ly cV9kaXNhYmxlKHZvcCk7CiAJfQogCi0JcGluX3BvbCA9IDB4ODsKLQlwaW5fcG9sIHw9IChhZGp1 c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTkhTWU5DKSA/IDAgOiAxOwotCXBpbl9w b2wgfD0gKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OVlNZTkMpID8gMCA6 ICgxIDw8IDEpOworCXBpbl9wb2wgPSBCSVQoRENMS19JTlZFUlQpOworCXBpbl9wb2wgfD0gKGFk anVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpID8KKwkJICAgMCA6IEJJ VChIU1lOQ19QT1NJVElWRSk7CisJcGluX3BvbCB8PSAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBE Uk1fTU9ERV9GTEFHX05WU1lOQykgPworCQkgICAwIDogQklUKFZTWU5DX1BPU0lUSVZFKTsKIAlW T1BfQ1RSTF9TRVQodm9wLCBwaW5fcG9sLCBwaW5fcG9sKTsKIAogCXN3aXRjaCAocy0+b3V0cHV0 X3R5cGUpIHsKQEAgLTEwODYsNiArMTA4OCwxMSBAQCBzdGF0aWMgdm9pZCB2b3BfY3J0Y19lbmFi bGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQogCQlWT1BfQ1RSTF9TRVQodm9wLCBtaXBpX3Bpbl9w b2wsIHBpbl9wb2wpOwogCQlWT1BfQ1RSTF9TRVQodm9wLCBtaXBpX2VuLCAxKTsKIAkJYnJlYWs7 CisJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQ6CisJCXBpbl9wb2wgJj0gfkJJ VChEQ0xLX0lOVkVSVCk7CisJCVZPUF9DVFJMX1NFVCh2b3AsIGRwX3Bpbl9wb2wsIHBpbl9wb2wp OworCQlWT1BfQ1RSTF9TRVQodm9wLCBkcF9lbiwgMSk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJ CURSTV9FUlJPUigidW5zdXBwb3J0IGNvbm5lY3Rvcl90eXBlWyVkXVxuIiwgcy0+b3V0cHV0X3R5 cGUpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9k cm1fdm9wLmggYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5oCmlu ZGV4IDFkYmM1MjYuLjVhNGZhYTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2No aXAvcm9ja2NoaXBfZHJtX3ZvcC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2Nr Y2hpcF9kcm1fdm9wLmgKQEAgLTQ1LDYgKzQ1LDcgQEAgc3RydWN0IHZvcF9jdHJsIHsKIAlzdHJ1 Y3Qgdm9wX3JlZyBlZHBfZW47CiAJc3RydWN0IHZvcF9yZWcgaGRtaV9lbjsKIAlzdHJ1Y3Qgdm9w X3JlZyBtaXBpX2VuOworCXN0cnVjdCB2b3BfcmVnIGRwX2VuOwogCXN0cnVjdCB2b3BfcmVnIG91 dF9tb2RlOwogCXN0cnVjdCB2b3BfcmVnIGRpdGhlcl9kb3duOwogCXN0cnVjdCB2b3BfcmVnIGRp dGhlcl91cDsKQEAgLTUzLDYgKzU0LDcgQEAgc3RydWN0IHZvcF9jdHJsIHsKIAlzdHJ1Y3Qgdm9w X3JlZyBoZG1pX3Bpbl9wb2w7CiAJc3RydWN0IHZvcF9yZWcgZWRwX3Bpbl9wb2w7CiAJc3RydWN0 IHZvcF9yZWcgbWlwaV9waW5fcG9sOworCXN0cnVjdCB2b3BfcmVnIGRwX3Bpbl9wb2w7CiAKIAlz dHJ1Y3Qgdm9wX3JlZyBodG90YWxfcHc7CiAJc3RydWN0IHZvcF9yZWcgaGFjdF9zdF9lbmQ7CkBA IC0yNDQsNiArMjQ2LDEzIEBAIGVudW0gc2NhbGVfZG93bl9tb2RlIHsKIAlTQ0FMRV9ET1dOX0FW RyA9IDB4MQogfTsKIAorZW51bSB2b3BfcG9sIHsKKwlIU1lOQ19QT1NJVElWRSA9IDAsCisJVlNZ TkNfUE9TSVRJVkUgPSAxLAorCURFTl9ORUdBVElWRSAgID0gMiwKKwlEQ0xLX0lOVkVSVCAgICA9 IDMKK307CisKICNkZWZpbmUgRlJBQ18xNl8xNihtdWx0LCBkaXYpICAgICgoKG11bHQpIDw8IDE2 KSAvIChkaXYpKQogI2RlZmluZSBTQ0xfRlRfREVGQVVMVF9GSVhQT0lOVF9TSElGVAkxMgogI2Rl ZmluZSBTQ0xfTUFYX1ZTS0lQTElORVMJCTQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9y b2NrY2hpcC9yb2NrY2hpcF92b3BfcmVnLmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9j a2NoaXBfdm9wX3JlZy5jCmluZGV4IGVlYTg0MjcuLmFhZWRlNmIgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF92b3BfcmVnLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL3JvY2tjaGlwL3JvY2tjaGlwX3ZvcF9yZWcuYwpAQCAtMjgzLDYgKzI4Myw3IEBAIHN0YXRp YyBjb25zdCBzdHJ1Y3Qgdm9wX2RhdGEgcmszMjg4X3ZvcCA9IHsKIHN0YXRpYyBjb25zdCBzdHJ1 Y3Qgdm9wX2N0cmwgcmszMzk5X2N0cmxfZGF0YSA9IHsKIAkuc3RhbmRieSA9IFZPUF9SRUcoUksz Mzk5X1NZU19DVFJMLCAweDEsIDIyKSwKIAkuZ2F0ZV9lbiA9IFZPUF9SRUcoUkszMzk5X1NZU19D VFJMLCAweDEsIDIzKSwKKwkuZHBfZW4gPSBWT1BfUkVHKFJLMzM5OV9TWVNfQ1RSTCwgMHgxLCAx MSksCiAJLnJnYl9lbiA9IFZPUF9SRUcoUkszMzk5X1NZU19DVFJMLCAweDEsIDEyKSwKIAkuaGRt aV9lbiA9IFZPUF9SRUcoUkszMzk5X1NZU19DVFJMLCAweDEsIDEzKSwKIAkuZWRwX2VuID0gVk9Q X1JFRyhSSzMzOTlfU1lTX0NUUkwsIDB4MSwgMTQpLApAQCAtMjkyLDYgKzI5Myw3IEBAIHN0YXRp YyBjb25zdCBzdHJ1Y3Qgdm9wX2N0cmwgcmszMzk5X2N0cmxfZGF0YSA9IHsKIAkuZGF0YV9ibGFu ayA9IFZPUF9SRUcoUkszMzk5X0RTUF9DVFJMMCwgMHgxLCAxOSksCiAJLm91dF9tb2RlID0gVk9Q X1JFRyhSSzMzOTlfRFNQX0NUUkwwLCAweGYsIDApLAogCS5yZ2JfcGluX3BvbCA9IFZPUF9SRUco UkszMzk5X0RTUF9DVFJMMSwgMHhmLCAxNiksCisJLmRwX3Bpbl9wb2wgPSBWT1BfUkVHKFJLMzM5 OV9EU1BfQ1RSTDEsIDB4ZiwgMTYpLAogCS5oZG1pX3Bpbl9wb2wgPSBWT1BfUkVHKFJLMzM5OV9E U1BfQ1RSTDEsIDB4ZiwgMjApLAogCS5lZHBfcGluX3BvbCA9IFZPUF9SRUcoUkszMzk5X0RTUF9D VFJMMSwgMHhmLCAyNCksCiAJLm1pcGlfcGluX3BvbCA9IFZPUF9SRUcoUkszMzk5X0RTUF9DVFJM MSwgMHhmLCAyOCksCi0tIAoxLjkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vZHJpLWRldmVsCg==