From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Zhong Subject: [v13 PATCH 5/5] drm/rockchip: cdn-dp: add cdn DP support for rk3399 Date: Sun, 21 Aug 2016 21:23:18 -0700 Message-ID: <1471839798-14729-6-git-send-email-zyw@rock-chips.com> References: <1471839798-14729-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: <1471839798-14729-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 Q2hhbmdlcyBpbiB2MTM6Ci0gc3VwcG9ydCBzdXNwZW5kL3Jlc3VtZQotIHN3aXRjaCBwb3dlciBk b21haW4gZHluYW1pY2FsbHkKLSByZS10cmFpbmluZyB3aGVuIGhwZCBzaWduYWwgaXMgdHJpZ2dl cmVkCgpDaGFuZ2VzIGluIHYxMjoKLSB1c2UgRVhUQ09OX1BST1BfVVNCX1NVUEVSU1BFRUQgdG8g cmVwbGFjZSBFWFRDT05fVVNCX0hPU1QKCkNoYW5nZXMgaW4gdjExOgotIGFkZCBiZXN0X2VuY29k ZXIgYmFjaywgc2luY2UgaXQgcmVxdWlyZWQgYnkgZHJtX2F0b21pY19oZWxwZXJfY2hlY2sKCkNo YW5nZXMgaW4gdjEwOgotIHJlbW92ZSBiZXN0X2VuY29kZXIgb3BzCi0gc3VwcG9ydCByZWFkIHNp bmsgY291bnQgZnJvbSBEUENECi0gY29udHJvbCB0aGUgZ3JmX2NsayBpbiBEUAoKQ2hhbmdlcyBp biB2OToKLSBkbyBub3QgbmVlZCByZXNldCB0aGUgcGh5IGJlZm9yZSBwb3dlcl9vbgotIGFkZCBh IG9yaWVudGF0aW9uIGluZm9ybWF0aW9uIGZvciBzZXRfY2FwYWJpbGl0eQotIHJldHJ5IHRvIHJl YWQgZHBjZCBpbiAxMCBzZWNvbmRzCgpDaGFuZ2VzIGluIHY4OgotIG9wdGltaXphdGlvbiB0aGUg ZXJyIGxvZwoKQ2hhbmdlcyBpbiB2NzoKLSBzdXBwb3J0IGZpcm13YXJlIHN0YW5kYnkgd2hlbiBu byBkcHR4IGNvbm5lY3Rpb24KLSBvcHRpbWl6YXRpb24gdGhlIGNhbGN1bGF0aW9uIG9mIHR1IHNp emUgYW5kIHZhbGlkIHN5bWJvbAoKQ2hhbmdlcyBpbiB2NjoKLSBhZGQgYSBwb3J0IHN0cnVjdAot IHNlbGVjdCBTTkRfU09DX0hETUlfQ09ERUMKLSBmb3JjZSByZXNldCB0aGUgcGh5IHdoZW4gaHBk IGRldGVjdGVkCgpDaGFuZ2VzIGluIHY1OgotIGFscGhhYmV0aWNhbCBvcmRlcgotIGRvIG5vdCB1 c2UgbG9uZywgdXNlIHUzMiBvciB1NjQKLSByZXR1cm4gTU9ERV9DTE9DS19ISUdIIHdoZW4gcmVx dWVzdGVkID4gYWN0dWFsCi0gT3B0aW1pemVkIENvZGluZyBTdHlsZQotIGFkZCBhIGZvcm11bGEg dG8gZ2V0IGJldHRlciB0dSBzaXplIGFuZCBzeW1ib2wgdmFsdWUuCi0gbW9kaWZ5IGFjY29yZGlu ZyB0byBTZWFuIFBhdWwncyBjb21tZW50cwotIGZpeGVkIHRoZSBmd193YWl0IGFsd2F5cyAwCgpD aGFuZ2VzIGluIHY0OgotIHVzZSBwaHkgZnJhbWV3b3JrIHRvIGNvbnRyb2wgRFAgcGh5Ci0gc3Vw cG9ydCAyIHBoeXMKCkNoYW5nZXMgaW4gdjM6Ci0gdXNlIEVYVENPTl9ESVNQX0RQIGFuZCBFWFRD T05fRElTUF9EUF9BTFQgY2FibGUgdG8gZ2V0IGRwIHBvcnQgc3RhdGUuCi0gcmVzZXQgc3BkaWYg YmVmb3JlIGNvbmZpZyBpdAotIG1vZGlmeSB0aGUgZmlybXdhcmUgY2xrIHRvIDEwME1oegotIHJl dHJ5IGxvYWQgZmlybXdhcmUgaWYgZncgZmlsZSBpcyByZXF1ZXN0ZWQgdG9vIGVhcmx5CgpDaGFu Z2VzIGluIHYyOgotIEFscGhhYmV0aWMgb3JkZXIKLSByZW1vdmUgZXhjZXNzIGVycm9yIG1lc3Nh Z2UKLSB1c2UgZGVmaW5lIGNsa19yYXRlCi0gY2hlY2sgYWxsIHJldHVybiB2YWx1ZQotIHJlbW92 ZSBkZXZfc2V0X25hbWUoZHAtPmRldiwgImNkbi1kcCIpOwotIHVzZSBzY2hlZHVsZV9kZWxheWVk X3dvcmsKLSByZW1vdmUgbmV2ZXItY2FsbGVkIGZ1bmN0aW9ucwotIHJlbW92ZSBzb21lIHVubmVj ZXNzYXJ5ICgpCgpDaGFuZ2VzIGluIHYxOgotIHVzZSBleHRjb24gQVBJCi0gdXNlIGhkbWktY29k ZWMgZm9yIHRoZSBEUCBBc29jCi0gZG8gbm90IGluaXRpYWxpemUgdGhlICJyZXQiCi0gcHJpbnRr IGEgZXJyIGxvZyB3aGVuIGRybV9vZl9lbmNvZGVyX2FjdGl2ZV9lbmRwb2ludF9pZAotIG1vZGlm eSB0aGUgZGNsayBwaW5fcG9sIHRvIGEgc2luZ2xlIGxpbmUKCiBkcml2ZXJzL2dwdS9kcm0vcm9j a2NoaXAvS2NvbmZpZyAgICAgICAgICAgIHwgICAxMCArCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2No aXAvTWFrZWZpbGUgICAgICAgICAgIHwgICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAv Y2RuLWRwLWNvcmUuYyAgICAgIHwgMTA1MiArKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRy aXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtY29yZS5oICAgICAgfCAgMTA2ICsrKwogZHJp dmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1yZWcuYyAgICAgICB8ICA5NTkgKysrKysrKysr KysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLXJlZy5oICAg ICAgIHwgIDQ4MiArKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hp cF9kcm1fdm9wLmMgfCAgIDEzICstCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBf ZHJtX3ZvcC5oIHwgICAgOSArCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfdm9w X3JlZy5jIHwgICAgMiArCiA5IGZpbGVzIGNoYW5nZWQsIDI2MzEgaW5zZXJ0aW9ucygrKSwgMyBk ZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAv Y2RuLWRwLWNvcmUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hp cC9jZG4tZHAtY29yZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3JvY2tj aGlwL2Nkbi1kcC1yZWcuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9yb2Nr Y2hpcC9jZG4tZHAtcmVnLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAv S2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9LY29uZmlnCmluZGV4IGQzMGJkYzMu LjIwYWFhZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9LY29uZmlnCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9LY29uZmlnCkBAIC0yNSw2ICsyNSwxNiBAQCBj b25maWcgUk9DS0NISVBfQU5BTE9HSVhfRFAKIAkgIGZvciB0aGUgQW5hbG9naXggQ29yZSBEUCBk cml2ZXIuIElmIHlvdSB3YW50IHRvIGVuYWJsZSBEUAogCSAgb24gUkszMjg4IGJhc2VkIFNvQywg eW91IHNob3VsZCBzZWxldCB0aGlzIG9wdGlvbi4KIAorY29uZmlnIFJPQ0tDSElQX0NETl9EUAor ICAgICAgICB0cmlzdGF0ZSAiUm9ja2NoaXAgY2RuIERQIgorICAgICAgICBkZXBlbmRzIG9uIERS TV9ST0NLQ0hJUAorCXNlbGVjdCBTTkRfU09DX0hETUlfQ09ERUMgaWYgU05EX1NPQworICAgICAg ICBoZWxwCisJICBUaGlzIHNlbGVjdHMgc3VwcG9ydCBmb3IgUm9ja2NoaXAgU29DIHNwZWNpZmlj IGV4dGVuc2lvbnMKKwkgIGZvciB0aGUgY2RuIERQIGRyaXZlci4gSWYgeW91IHdhbnQgdG8gZW5h YmxlIERwIG9uCisJICBSSzMzOTkgYmFzZWQgU29DLCB5b3Ugc2hvdWxkIHNlbGVjdCB0aGlzCisJ ICBvcHRpb24uCisKIGNvbmZpZyBST0NLQ0hJUF9EV19IRE1JCiAgICAgICAgIHRyaXN0YXRlICJS b2NrY2hpcCBzcGVjaWZpYyBleHRlbnNpb25zIGZvciBTeW5vcHN5cyBEVyBIRE1JIgogICAgICAg ICBkZXBlbmRzIG9uIERSTV9ST0NLQ0hJUApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Jv Y2tjaGlwL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlCmluZGV4 IDk3NDYzNjUuLjZhMDc4MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9N YWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUKQEAgLTcsNiAr Nyw3IEBAIHJvY2tjaGlwZHJtLXkgOj0gcm9ja2NoaXBfZHJtX2Rydi5vIHJvY2tjaGlwX2RybV9m Yi5vIFwKIHJvY2tjaGlwZHJtLSQoQ09ORklHX0RSTV9GQkRFVl9FTVVMQVRJT04pICs9IHJvY2tj aGlwX2RybV9mYmRldi5vCiAKIG9iai0kKENPTkZJR19ST0NLQ0hJUF9BTkFMT0dJWF9EUCkgKz0g YW5hbG9naXhfZHAtcm9ja2NoaXAubworb2JqLSQoQ09ORklHX1JPQ0tDSElQX0NETl9EUCkgKz0g Y2RuLWRwLWNvcmUubyBjZG4tZHAtcmVnLm8KIG9iai0kKENPTkZJR19ST0NLQ0hJUF9EV19IRE1J KSArPSBkd19oZG1pLXJvY2tjaGlwLm8KIG9iai0kKENPTkZJR19ST0NLQ0hJUF9EV19NSVBJX0RT SSkgKz0gZHctbWlwaS1kc2kubwogb2JqLSQoQ09ORklHX1JPQ0tDSElQX0lOTk9fSERNSSkgKz0g aW5ub19oZG1pLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAt Y29yZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1jb3JlLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlNTUxZAotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtY29yZS5jCkBAIC0wLDAgKzEsMTA1MiBAQAor LyoKKyAqIENvcHlyaWdodCAoQykgRnV6aG91IFJvY2tjaGlwIEVsZWN0cm9uaWNzIENvLkx0ZAor ICogQXV0aG9yOiBDaHJpcyBaaG9uZyA8enl3QHJvY2stY2hpcHMuY29tPgorICoKKyAqIFRoaXMg c29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5k IG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg Ki8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVs cGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9k cm1fZHBfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+CisjaW5jbHVkZSA8ZHJt L2RybV9vZi5oPgorCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY29t cG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvZXh0Y29uLmg+CisjaW5jbHVkZSA8bGludXgvZmly bXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNl dC5oPgorCisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3Bo eS9waHkuaD4KKworI2luY2x1ZGUgPHNvdW5kL2hkbWktY29kZWMuaD4KKworI2luY2x1ZGUgImNk bi1kcC1jb3JlLmgiCisjaW5jbHVkZSAiY2RuLWRwLXJlZy5oIgorI2luY2x1ZGUgInJvY2tjaGlw X2RybV92b3AuaCIKKworI2RlZmluZSBjb25uZWN0b3JfdG9fZHAoYykgXAorCQljb250YWluZXJf b2YoYywgc3RydWN0IGNkbl9kcF9kZXZpY2UsIGNvbm5lY3RvcikKKworI2RlZmluZSBlbmNvZGVy X3RvX2RwKGMpIFwKKwkJY29udGFpbmVyX29mKGMsIHN0cnVjdCBjZG5fZHBfZGV2aWNlLCBlbmNv ZGVyKQorCisjZGVmaW5lIEdSRl9TT0NfQ09OOQkJMHg2MjI0CisjZGVmaW5lIERQX1NFTF9WT1Bf TElUCQlCSVQoMTIpCisjZGVmaW5lIEdSRl9TT0NfQ09OMjYJCTB4NjI2OAorI2RlZmluZSBVUEhZ X1NFTF9CSVQJCTMKKyNkZWZpbmUgVVBIWV9TRUxfTUFTSwkJQklUKDE5KQorI2RlZmluZSBEUFRY X0hQRF9TRUwJCSgzIDw8IDEyKQorI2RlZmluZSBEUFRYX0hQRF9ERUwJCSgyIDw8IDEyKQorI2Rl ZmluZSBEUFRYX0hQRF9TRUxfTUFTSwkoMyA8PCAyOCkKKworI2RlZmluZSBNQVhfRldfV0FJVF9T RUNTCTY0CisjZGVmaW5lIENETl9EUF9GSVJNV0FSRQkJInJvY2tjaGlwL2RwdHguYmluIgorCitz dHJ1Y3QgY2RuX2RwX2RhdGEgeworCXU4IG1heF9waHk7Cit9OworCitzdHJ1Y3QgY2RuX2RwX2Rh dGEgcmszMzk5X2Nkbl9kcCA9IHsKKwkubWF4X3BoeSA9IDIsCit9OworCitzdGF0aWMgY29uc3Qg c3RydWN0IG9mX2RldmljZV9pZCBjZG5fZHBfZHRfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9 ICJyb2NrY2hpcCxyazMzOTktY2RuLWRwIiwKKwkJLmRhdGEgPSAodm9pZCAqKSZyazMzOTlfY2Ru X2RwIH0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGNkbl9kcF9kdF9pZHMp OworCitzdGF0aWMgaW50IGNkbl9kcF9ncmZfd3JpdGUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw LAorCQkJICAgIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWwpCit7CisJaW50IHJl dDsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkcC0+Z3JmX2Nsayk7CisJaWYgKHJldCkg eworCQlkZXZfZXJyKGRwLT5kZXYsICJGYWlsZWQgdG8gcHJlcGFyZV9lbmFibGUgZ3JmIGNsb2Nr XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSByZWdtYXBfd3JpdGUoZHAtPmdyZiwg cmVnLCB2YWwpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiQ291bGQgbm90IHdy aXRlIHRvIEdSRjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJY2xrX2Rpc2Fi bGVfdW5wcmVwYXJlKGRwLT5ncmZfY2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IGNkbl9kcF9jbGtfZW5hYmxlKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCkKK3sKKwlpbnQgcmV0 OworCXUzMiByYXRlOworCisJcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYyhkcC0+ZGV2KTsKKwlp ZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJjYW5ub3QgZ2V0IHBtIHJ1bnRpbWUg JWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3BjbGs7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVf ZW5hYmxlKGRwLT5wY2xrKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJj YW5ub3QgZW5hYmxlIGRwIHBjbGsgJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3BjbGs7CisJfQor CisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRwLT5jb3JlX2Nsayk7CisJaWYgKHJldCA8IDAp IHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiY2Fubm90IGVuYWJsZSBjb3JlX2NsayAlZFxuIiwgcmV0 KTsKKwkJZ290byBlcnJfY29yZV9jbGs7CisJfQorCisJcmVzZXRfY29udHJvbF9hc3NlcnQoZHAt PmRwdHhfcnN0KTsKKwlyZXNldF9jb250cm9sX2Fzc2VydChkcC0+YXBiX3JzdCk7CisJcmVzZXRf Y29udHJvbF9kZWFzc2VydChkcC0+ZHB0eF9yc3QpOworCXJlc2V0X2NvbnRyb2xfZGVhc3NlcnQo ZHAtPmFwYl9yc3QpOworCisJcmF0ZSA9IGNsa19nZXRfcmF0ZShkcC0+Y29yZV9jbGspOworCWlm IChyYXRlIDwgMCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJnZXQgY2xrIHJhdGUgZmFpbGVkOiAl ZFxuIiwgcmF0ZSk7CisJCWdvdG8gZXJyX3NldF9yYXRlOworCX0KKworCWNkbl9kcF9zZXRfZndf Y2xrKGRwLCByYXRlKTsKKwljZG5fZHBfY2xvY2tfcmVzZXQoZHApOworCisJcmV0dXJuIDA7CisK K2Vycl9zZXRfcmF0ZToKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHAtPmNvcmVfY2xrKTsKK2Vy cl9jb3JlX2NsazoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHAtPnBjbGspOworZXJyX3BjbGs6 CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgY2RuX2RwX2Nsa19kaXNhYmxlKHN0cnVj dCBjZG5fZHBfZGV2aWNlICpkcCkKK3sKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHAtPnBjbGsp OworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkcC0+Y29yZV9jbGspOworCXBtX3J1bnRpbWVfcHV0 X3N5bmMoZHAtPmRldik7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzCitj ZG5fZHBfY29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBi b29sIGZvcmNlKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGNvbm5lY3Rvcl90b19k cChjb25uZWN0b3IpOworCisJcmV0dXJuIGRwLT5ocGRfc3RhdHVzOworfQorCitzdGF0aWMgdm9p ZCBjZG5fZHBfY29ubmVjdG9yX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv cikKK3sKKwlkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoY29ubmVjdG9yKTsKKwlkcm1fY29ubmVj dG9yX2NsZWFudXAoY29ubmVjdG9yKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9y X2Z1bmNzIGNkbl9kcF9hdG9taWNfY29ubmVjdG9yX2Z1bmNzID0geworCS5kcG1zID0gZHJtX2F0 b21pY19oZWxwZXJfY29ubmVjdG9yX2RwbXMsCisJLmRldGVjdCA9IGNkbl9kcF9jb25uZWN0b3Jf ZGV0ZWN0LAorCS5kZXN0cm95ID0gY2RuX2RwX2Nvbm5lY3Rvcl9kZXN0cm95LAorCS5maWxsX21v ZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5yZXNldCA9 IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9z dGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCisJLmF0 b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lf c3RhdGUsCit9OworCitzdGF0aWMgaW50IGNkbl9kcF9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw ID0gY29ubmVjdG9yX3RvX2RwKGNvbm5lY3Rvcik7CisJc3RydWN0IGVkaWQgKmVkaWQ7CisJaW50 IHJldCA9IDA7CisKKwllZGlkID0gZHJtX2RvX2dldF9lZGlkKGNvbm5lY3RvciwgY2RuX2RwX2dl dF9lZGlkX2Jsb2NrLCBkcCk7CisJaWYgKGVkaWQpIHsKKwkJZGV2X2RiZyhkcC0+ZGV2LCAiZ290 IGVkaWQ6IHdpZHRoWyVkXSB4IGhlaWdodFslZF1cbiIsCisJCQllZGlkLT53aWR0aF9jbSwgZWRp ZC0+aGVpZ2h0X2NtKTsKKworCQlkcC0+c2lua19oYXNfYXVkaW8gPSBkcm1fZGV0ZWN0X21vbml0 b3JfYXVkaW8oZWRpZCk7CisJCXJldCA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsIGVk aWQpOworCQlpZiAocmV0KSB7CisJCQlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJv cGVydHkoY29ubmVjdG9yLAorCQkJCQkJCQllZGlkKTsKKwkJCWRybV9lZGlkX3RvX2VsZChjb25u ZWN0b3IsIGVkaWQpOworCQl9CisJCWtmcmVlKGVkaWQpOworCX0KKworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2VuY29kZXIgKgorY2RuX2RwX2Nvbm5lY3Rvcl9iZXN0X2Vu Y29kZXIoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgY2RuX2Rw X2RldmljZSAqZHAgPSBjb25uZWN0b3JfdG9fZHAoY29ubmVjdG9yKTsKKworCXJldHVybiAmZHAt PmVuY29kZXI7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkKHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJICAgICAgIHN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGNvbm5lY3Rv cl90b19kcChjb25uZWN0b3IpOworCXN0cnVjdCBkcm1fZGlzcGxheV9pbmZvICpkaXNwbGF5X2lu Zm8gPSAmZHAtPmNvbm5lY3Rvci5kaXNwbGF5X2luZm87CisJdTMyIHJlcXVlc3RlZCA9IG1vZGUt PmNsb2NrICogZGlzcGxheV9pbmZvLT5icGMgKiAzIC8gMTAwMDsKKwl1MzIgYWN0dWFsLCByYXRl LCBzaW5rX21heCwgc291cmNlX21heCA9IDA7CisJdTggbGFuZXMsIGk7CisKKwkvKiBmaW5kIHRo ZSBydW5uaW5nIHBvcnQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZHAtPnBvcnRzOyBpKyspIHsKKwkJ aWYgKGRwLT5wb3J0W2ldLT5waHlfc3RhdHVzKSB7CisJCQlzb3VyY2VfbWF4ID0gZHAtPnBvcnRb aV0tPmNhcF9sYW5lczsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc2lua19tYXggPSBkcm1fZHBf bWF4X2xhbmVfY291bnQoZHAtPmRwY2QpOworCWxhbmVzID0gbWluKHNvdXJjZV9tYXgsIHNpbmtf bWF4KTsKKworCXNvdXJjZV9tYXggPSBkcm1fZHBfYndfY29kZV90b19saW5rX3JhdGUoQ0ROX0RQ X01BWF9MSU5LX1JBVEUpOworCXNpbmtfbWF4ID0gZHJtX2RwX21heF9saW5rX3JhdGUoZHAtPmRw Y2QpOworCXJhdGUgPSBtaW4oc291cmNlX21heCwgc2lua19tYXgpOworCisJYWN0dWFsID0gcmF0 ZSAqIGxhbmVzIC8gMTAwOworCisJLyogZWZmaWNpZW5jeSBpcyBhYm91dCAwLjggKi8KKwlhY3R1 YWwgPSBhY3R1YWwgKiA4IC8gMTA7CisKKwlpZiAocmVxdWVzdGVkID4gYWN0dWFsKSB7CisJCWRl dl9kYmcoZHAtPmRldiwgInJlcXVlc3RlZD0lZCwgYWN0dWFsPSVkLCBjbG9jaz0lZFxuIiwKKwkJ CXJlcXVlc3RlZCwgYWN0dWFsLCBtb2RlLT5jbG9jayk7CisJCXJldHVybiBNT0RFX0NMT0NLX0hJ R0g7CisJfQorCisJcmV0dXJuIE1PREVfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Nvbm5l Y3Rvcl9oZWxwZXJfZnVuY3MgY2RuX2RwX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJLmdl dF9tb2RlcyA9IGNkbl9kcF9jb25uZWN0b3JfZ2V0X21vZGVzLAorCS5iZXN0X2VuY29kZXIgPSBj ZG5fZHBfY29ubmVjdG9yX2Jlc3RfZW5jb2RlciwKKwkubW9kZV92YWxpZCA9IGNkbl9kcF9jb25u ZWN0b3JfbW9kZV92YWxpZCwKK307CisKK3N0YXRpYyB2b2lkIGNkbl9kcF9jb21taXQoc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGVu Y29kZXJfdG9fZHAoZW5jb2Rlcik7CisJaW50IHJldDsKKworCXJldCA9IGNkbl9kcF90cmFpbmlu Z19zdGFydChkcCk7CisJaWYgKHJldCkKKwkJcmV0dXJuOworCisJcmV0ID0gY2RuX2RwX2dldF90 cmFpbmluZ19zdGF0dXMoZHApOworCWlmIChyZXQpCisJCXJldHVybjsKKworCWRldl9pbmZvKGRw LT5kZXYsICJyYXRlOjB4JXgsIGxhbmVzOiVkXG4iLAorCQkgZHAtPmxpbmsucmF0ZSwgZHAtPmxp bmsubnVtX2xhbmVzKTsKKworCWlmIChjZG5fZHBfc2V0X3ZpZGVvX3N0YXR1cyhkcCwgQ09OVFJP TF9WSURFT19JRExFKSkKKwkJcmV0dXJuOworCisJaWYgKGNkbl9kcF9jb25maWdfdmlkZW8oZHAp KQorCQlyZXR1cm47CisKKwlpZiAoY2RuX2RwX3NldF92aWRlb19zdGF0dXMoZHAsIENPTlRST0xf VklERU9fVkFMSUQpKQorCQlyZXR1cm47CisKKwlkcC0+ZHBtc19tb2RlID0gRFJNX01PREVfRFBN U19PTjsKK30KKworc3RhdGljIHZvaWQgY2RuX2RwX2VuY29kZXJfbW9kZV9zZXQoc3RydWN0IGRy bV9lbmNvZGVyICplbmNvZGVyLAorCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZSwKKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkKQoreworCXN0cnVj dCBjZG5fZHBfZGV2aWNlICpkcCA9IGVuY29kZXJfdG9fZHAoZW5jb2Rlcik7CisJc3RydWN0IGRy bV9kaXNwbGF5X2luZm8gKmRpc3BsYXlfaW5mbyA9ICZkcC0+Y29ubmVjdG9yLmRpc3BsYXlfaW5m bzsKKwlzdHJ1Y3Qgcm9ja2NoaXBfY3J0Y19zdGF0ZSAqc3RhdGU7CisJc3RydWN0IHZpZGVvX2lu Zm8gKnZpZGVvID0gJmRwLT52aWRlb19pbmZvOworCWludCByZXQsIHZhbDsKKworCXN3aXRjaCAo ZGlzcGxheV9pbmZvLT5icGMpIHsKKwljYXNlIDE2OgorCWNhc2UgMTI6CisJY2FzZSAxMDoKKwkJ dmlkZW8tPmNvbG9yX2RlcHRoID0gMTA7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJdmlkZW8tPmNv bG9yX2RlcHRoID0gNjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdmlkZW8tPmNvbG9yX2RlcHRo ID0gODsKKwkJYnJlYWs7CisJfQorCisJdmlkZW8tPmNvbG9yX2ZtdCA9IFBYTF9SR0I7CisKKwl2 aWRlby0+dl9zeW5jX3BvbGFyaXR5ID0gISEobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05W U1lOQyk7CisJdmlkZW8tPmhfc3luY19wb2xhcml0eSA9ICEhKG1vZGUtPmZsYWdzICYgRFJNX01P REVfRkxBR19OSFNZTkMpOworCisJcmV0ID0gZHJtX29mX2VuY29kZXJfYWN0aXZlX2VuZHBvaW50 X2lkKGRwLT5kZXYtPm9mX25vZGUsIGVuY29kZXIpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9l cnIoZHAtPmRldiwgIkNvdWxkIG5vdCBnZXQgdm9wIGlkLCAlZCIsIHJldCk7CisJCXJldHVybjsK Kwl9CisKKwlkZXZfZGJnKGRwLT5kZXYsICJ2b3AgJXMgb3V0cHV0IHRvIGNkbi1kcFxuIiwgKHJl dCkgPyAiTElUIiA6ICJCSUciKTsKKwlzdGF0ZSA9IHRvX3JvY2tjaGlwX2NydGNfc3RhdGUoZW5j b2Rlci0+Y3J0Yy0+c3RhdGUpOworCWlmIChyZXQpIHsKKwkJdmFsID0gRFBfU0VMX1ZPUF9MSVQg fCAoRFBfU0VMX1ZPUF9MSVQgPDwgMTYpOworCQlzdGF0ZS0+b3V0cHV0X21vZGUgPSBST0NLQ0hJ UF9PVVRfTU9ERV9QODg4OworCX0gZWxzZSB7CisJCXZhbCA9IERQX1NFTF9WT1BfTElUIDw8IDE2 OworCQlzdGF0ZS0+b3V0cHV0X21vZGUgPSBST0NLQ0hJUF9PVVRfTU9ERV9BQUFBOworCX0KKwor CXJldCA9IGNkbl9kcF9ncmZfd3JpdGUoZHAsIEdSRl9TT0NfQ09OOSwgdmFsKTsKKwlpZiAocmV0 KQorCQlyZXR1cm47CisKKwltZW1jcHkoJmRwLT5tb2RlLCBhZGp1c3RlZCwgc2l6ZW9mKCptb2Rl KSk7Cit9CisKK3N0YXRpYyB2b2lkIGNkbl9kcF9lbmNvZGVyX2VuYWJsZShzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwID0gZW5jb2Rlcl90 b19kcChlbmNvZGVyKTsKKworCWlmIChkcC0+ZHBtc19tb2RlICE9IERSTV9NT0RFX0RQTVNfT04p CisJCWNkbl9kcF9jb21taXQoZW5jb2Rlcik7Cit9CisKK3N0YXRpYyB2b2lkIGNkbl9kcF9lbmNv ZGVyX2Rpc2FibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBjZG5f ZHBfZGV2aWNlICpkcCA9IGVuY29kZXJfdG9fZHAoZW5jb2Rlcik7CisKKwlkcC0+ZHBtc19tb2Rl ID0gRFJNX01PREVfRFBNU19PRkY7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX2VuY29kZXJfYXRv bWljX2NoZWNrKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkgICAgICAgc3RydWN0 IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Nvbm5l Y3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKK3sKKwlzdHJ1Y3Qgcm9ja2NoaXBfY3J0Y19zdGF0ZSAq cyA9IHRvX3JvY2tjaGlwX2NydGNfc3RhdGUoY3J0Y19zdGF0ZSk7CisKKwlzLT5vdXRwdXRfbW9k ZSA9IFJPQ0tDSElQX09VVF9NT0RFX0FBQUE7CisJcy0+b3V0cHV0X3R5cGUgPSBEUk1fTU9ERV9D T05ORUNUT1JfRGlzcGxheVBvcnQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBk cm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgY2RuX2RwX2VuY29kZXJfaGVscGVyX2Z1bmNzID0gewor CS5tb2RlX3NldCA9IGNkbl9kcF9lbmNvZGVyX21vZGVfc2V0LAorCS5lbmFibGUgPSBjZG5fZHBf ZW5jb2Rlcl9lbmFibGUsCisJLmRpc2FibGUgPSBjZG5fZHBfZW5jb2Rlcl9kaXNhYmxlLAorCS5h dG9taWNfY2hlY2sgPSBjZG5fZHBfZW5jb2Rlcl9hdG9taWNfY2hlY2ssCit9OworCitzdGF0aWMg c3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIGNkbl9kcF9lbmNvZGVyX2Z1bmNzID0geworCS5kZXN0 cm95ID0gZHJtX2VuY29kZXJfY2xlYW51cCwKK307CisKK3N0YXRpYyBpbnQgY2RuX2RwX2Zpcm13 YXJlX2luaXQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCWludCByZXQ7CisJY29uc3Qg dTMyICppcmFtX2RhdGEsICpkcmFtX2RhdGE7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9 IGRwLT5mdzsKKwljb25zdCBzdHJ1Y3QgY2RuX2Zpcm13YXJlX2hlYWRlciAqaGRyOworCisJaGRy ID0gKHN0cnVjdCBjZG5fZmlybXdhcmVfaGVhZGVyICopZnctPmRhdGE7CisJaWYgKGZ3LT5zaXpl ICE9IGxlMzJfdG9fY3B1KGhkci0+c2l6ZV9ieXRlcykpIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAi ZmlybXdhcmUgaXMgaW52YWxpZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlyYW1f ZGF0YSA9IChjb25zdCB1MzIgKikoZnctPmRhdGEgKyBoZHItPmhlYWRlcl9zaXplKTsKKwlkcmFt X2RhdGEgPSAoY29uc3QgdTMyICopKGZ3LT5kYXRhICsgaGRyLT5oZWFkZXJfc2l6ZSArIGhkci0+ aXJhbV9zaXplKTsKKworCXJldCA9IGNkbl9kcF9sb2FkX2Zpcm13YXJlKGRwLCBpcmFtX2RhdGEs IGhkci0+aXJhbV9zaXplLAorCQkJCSAgIGRyYW1fZGF0YSwgaGRyLT5kcmFtX3NpemUpOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBjZG5fZHBfc2V0X2Zpcm13YXJlX2FjdGl2 ZShkcCwgdHJ1ZSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJhY3RpdmUgdWNw dSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiBjZG5f ZHBfZXZlbnRfY29uZmlnKGRwKTsKK30KKworc3RhdGljIGludCBjZG5fZHBfcGFyc2VfZHQoc3Ry dWN0IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRwLT5kZXY7 CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKKwlzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHJlc291 cmNlICpyZXM7CisKKwlkcC0+Z3JmID0gc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShu cCwgInJvY2tjaGlwLGdyZiIpOworCWlmIChJU19FUlIoZHAtPmdyZikpIHsKKwkJZGV2X2Vycihk ZXYsICJjZG4tZHAgbmVlZHMgcm9ja2NoaXAsZ3JmIHByb3BlcnR5XG4iKTsKKwkJcmV0dXJuIFBU Ul9FUlIoZHAtPmdyZik7CisJfQorCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYs IElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlkcC0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShk ZXYsIHJlcyk7CisJaWYgKElTX0VSUihkcC0+cmVncykpIHsKKwkJZGV2X2VycihkZXYsICJpb3Jl bWFwIHJlZyBmYWlsZWRcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkcC0+cmVncyk7CisJfQorCisJ ZHAtPmNvcmVfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImNvcmUtY2xrIik7CisJaWYgKElTX0VS UihkcC0+Y29yZV9jbGspKSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IGdldCBjb3JlX2Nsa19k cFxuIik7CisJCXJldHVybiBQVFJfRVJSKGRwLT5jb3JlX2Nsayk7CisJfQorCisJZHAtPnBjbGsg PSBkZXZtX2Nsa19nZXQoZGV2LCAicGNsayIpOworCWlmIChJU19FUlIoZHAtPnBjbGspKSB7CisJ CWRldl9lcnIoZGV2LCAiY2Fubm90IGdldCBwY2xrXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHAt PnBjbGspOworCX0KKworCWRwLT5zcGRpZl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAic3BkaWYi KTsKKwlpZiAoSVNfRVJSKGRwLT5zcGRpZl9jbGspKSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90 IGdldCBzcGRpZl9jbGtcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkcC0+c3BkaWZfY2xrKTsKKwl9 CisKKwlkcC0+Z3JmX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJncmYiKTsKKwlpZiAoSVNfRVJS KGRwLT5ncmZfY2xrKSkgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBnZXQgZ3JmIGNsa1xuIik7 CisJCXJldHVybiBQVFJfRVJSKGRwLT5ncmZfY2xrKTsKKwl9CisKKwlkcC0+c3BkaWZfcnN0ID0g ZGV2bV9yZXNldF9jb250cm9sX2dldChkZXYsICJzcGRpZiIpOworCWlmIChJU19FUlIoZHAtPnNw ZGlmX3JzdCkpIHsKKwkJZGV2X2VycihkZXYsICJubyBzcGRpZiByZXNldCBjb250cm9sIGZvdW5k XG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHAtPnNwZGlmX3JzdCk7CisJfQorCisJZHAtPmRwdHhf cnN0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldChkZXYsICJkcHR4Iik7CisJaWYgKElTX0VSUihk cC0+ZHB0eF9yc3QpKSB7CisJCWRldl9lcnIoZGV2LCAibm8gdXBoeSByZXNldCBjb250cm9sIGZv dW5kXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHAtPmRwdHhfcnN0KTsKKwl9CisKKwlkcC0+YXBi X3JzdCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXQoZGV2LCAiYXBiIik7CisJaWYgKElTX0VSUihk cC0+YXBiX3JzdCkpIHsKKwkJZGV2X2VycihkZXYsICJubyBhcGIgcmVzZXQgY29udHJvbCBmb3Vu ZFxuIik7CisJCXJldHVybiBQVFJfRVJSKGRwLT5hcGJfcnN0KTsKKwl9CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBjZG5fZHBfYXVkaW9faHdfcGFyYW1zKHN0cnVjdCBkZXZpY2UgKmRl diwgIHZvaWQgKmRhdGEsCisJCQkJICBzdHJ1Y3QgaGRtaV9jb2RlY19kYWlmbXQgKmRhaWZtdCwK KwkJCQkgIHN0cnVjdCBoZG1pX2NvZGVjX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBjZG5f ZHBfZGV2aWNlICpkcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBhdWRpb19pbmZv IGF1ZGlvID0geworCQkuc2FtcGxlX3dpZHRoID0gcGFyYW1zLT5zYW1wbGVfd2lkdGgsCisJCS5z YW1wbGVfcmF0ZSA9IHBhcmFtcy0+c2FtcGxlX3JhdGUsCisJCS5jaGFubmVscyA9IHBhcmFtcy0+ Y2hhbm5lbHMsCisJfTsKKwlpbnQgcmV0OworCisJaWYgKCFkcC0+ZW5jb2Rlci5jcnRjKQorCQly ZXR1cm4gLUVOT0RFVjsKKworCXN3aXRjaCAoZGFpZm10LT5mbXQpIHsKKwljYXNlIEhETUlfSTJT OgorCQlhdWRpby5mb3JtYXQgPSBBRk1UX0kyUzsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX1NQRElG OgorCQlhdWRpby5mb3JtYXQgPSBBRk1UX1NQRElGOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlk ZXZfZXJyKGRldiwgIiVzOiBJbnZhbGlkIGZvcm1hdCAlZFxuIiwgX19mdW5jX18sIGRhaWZtdC0+ Zm10KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gY2RuX2RwX2F1ZGlvX2NvbmZp ZyhkcCwgJmF1ZGlvKTsKKwlpZiAoIXJldCkKKwkJZHAtPmF1ZGlvX2luZm8gPSBhdWRpbzsKKwor CXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGNkbl9kcF9hdWRpb19zaHV0ZG93bihzdHJ1 Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldDsKKworCWlmICghZHAtPmVuY29kZXIu Y3J0YykKKwkJcmV0dXJuOworCisJcmV0ID0gY2RuX2RwX2F1ZGlvX3N0b3AoZHAsICZkcC0+YXVk aW9faW5mbyk7CisJaWYgKCFyZXQpCisJCWRwLT5hdWRpb19pbmZvLmZvcm1hdCA9IEFGTVRfVU5V U0VEOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9hdWRpb19kaWdpdGFsX211dGUoc3RydWN0IGRl dmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJCSAgICAgYm9vbCBlbmFibGUpCit7CisJc3RydWN0 IGNkbl9kcF9kZXZpY2UgKmRwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoIWRwLT5l bmNvZGVyLmNydGMpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIGNkbl9kcF9hdWRpb19t dXRlKGRwLCBlbmFibGUpOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9hdWRpb19nZXRfZWxkKHN0 cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCQl1OCAqYnVmLCBzaXplX3QgbGVuKQor eworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0 cnVjdCBkcm1fbW9kZV9jb25maWcgKmNvbmZpZyA9ICZkcC0+ZW5jb2Rlci5kZXYtPm1vZGVfY29u ZmlnOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJaW50IHJldCA9IC1FTk9E RVY7CisKKwltdXRleF9sb2NrKCZjb25maWctPm11dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5 KGNvbm5lY3RvciwgJmNvbmZpZy0+Y29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJaWYgKCZkcC0+ ZW5jb2RlciA9PSBjb25uZWN0b3ItPmVuY29kZXIpIHsKKwkJCW1lbWNweShidWYsIGNvbm5lY3Rv ci0+ZWxkLAorCQkJICAgICAgIG1pbihzaXplb2YoY29ubmVjdG9yLT5lbGQpLCBsZW4pKTsKKwkJ CXJldCA9IDA7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZjb25maWctPm11dGV4KTsKKworCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRtaV9jb2RlY19vcHMgYXVkaW9f Y29kZWNfb3BzID0geworCS5od19wYXJhbXMgPSBjZG5fZHBfYXVkaW9faHdfcGFyYW1zLAorCS5h dWRpb19zaHV0ZG93biA9IGNkbl9kcF9hdWRpb19zaHV0ZG93biwKKwkuZGlnaXRhbF9tdXRlID0g Y2RuX2RwX2F1ZGlvX2RpZ2l0YWxfbXV0ZSwKKwkuZ2V0X2VsZCA9IGNkbl9kcF9hdWRpb19nZXRf ZWxkLAorfTsKKworc3RhdGljIGludCBjZG5fZHBfYXVkaW9fY29kZWNfaW5pdChzdHJ1Y3QgY2Ru X2RwX2RldmljZSAqZHAsCisJCQkJICAgc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBo ZG1pX2NvZGVjX3BkYXRhIGNvZGVjX2RhdGEgPSB7CisJCS5pMnMgPSAxLAorCQkuc3BkaWYgPSAx LAorCQkub3BzID0gJmF1ZGlvX2NvZGVjX29wcywKKwkJLm1heF9pMnNfY2hhbm5lbHMgPSA4LAor CX07CisKKwlkcC0+YXVkaW9fcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9kYXRhKAor CQkJIGRldiwgSERNSV9DT0RFQ19EUlZfTkFNRSwgUExBVEZPUk1fREVWSURfQVVUTywKKwkJCSAm Y29kZWNfZGF0YSwgc2l6ZW9mKGNvZGVjX2RhdGEpKTsKKworCXJldHVybiBQVFJfRVJSX09SX1pF Uk8oZHAtPmF1ZGlvX3BkZXYpOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9nZXRfY2FwX2xhbmVz KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwKKwkJCQlzdHJ1Y3QgZXh0Y29uX2RldiAqZWRldikK K3sKKwl1bmlvbiBleHRjb25fcHJvcGVydHlfdmFsdWUgcHJvcGVydHk7CisJYm9vbCBkcHR4Owor CXU4IGxhbmVzOworCisJaWYgKGRwLT5zdXNwZW5kKQorCQlyZXR1cm4gMDsKKworCWRwdHggPSBl eHRjb25fZ2V0X3N0YXRlKGVkZXYsIEVYVENPTl9ESVNQX0RQKTsKKworCWlmIChkcHR4KSB7CisJ CWV4dGNvbl9nZXRfcHJvcGVydHkoZWRldiwgRVhUQ09OX0RJU1BfRFAsCisJCQkJICAgIEVYVENP Tl9QUk9QX1VTQl9TVVBFUlNQRUVELCAmcHJvcGVydHkpOworCQlpZiAocHJvcGVydHkuaW50dmFs KQorCQkJbGFuZXMgPSAyOworCQllbHNlCisJCQlsYW5lcyA9IDQ7CisJfSBlbHNlIHsKKwkJbGFu ZXMgPSAwOworCX0KKworCXJldHVybiBsYW5lczsKK30KKworc3RhdGljIGludCBjZG5fZHBfZ2V0 X2RwY2Qoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCBzdHJ1Y3QgY2RuX2RwX3BvcnQgKnBvcnQp Cit7CisJdTggc2lua19jb3VudDsKKwlpbnQgaSwgcmV0OworCisJLyoKKwkgKiBOYXRpdmUgcmVh ZCB3aXRoIHJldHJ5IGZvciBsaW5rIHN0YXR1cyBhbmQgcmVjZWl2ZXIgY2FwYWJpbGl0eSByZWFk cworCSAqIGZvciBjYXNlcyB3aGVyZSB0aGUgc2luayBtYXkgc3RpbGwgbm90IGJlIHJlYWR5Lgor CSAqCisJICogU2lua3MgYXJlICpzdXBwb3NlZCogdG8gY29tZSB1cCB3aXRoaW4gMW1zIGZyb20g YW4gb2ZmIHN0YXRlLCBidXQKKwkgKiBzb21lIERPQ0tzIG5lZWQgYWJvdXQgNSBzZWNvbmRzIHRv IHBvd2VyIHVwLCBzbyByZWFkIHRoZSBkcGNkIGV2ZXJ5CisJICogMTAwbXMsIGlmIGNhbiBub3Qg Z2V0IGEgZ29vZCBkcGNkIGluIDEwIHNlY29uZHMsIGdpdmUgdXAuCisJICovCisJZm9yIChpID0g MDsgaSA8IDEwMDsgaSsrKSB7CisJCXJldCA9IGNkbl9kcF9kcGNkX3JlYWQoZHAsIERQX1NJTktf Q09VTlQsCisJCQkJICAgICAgICZzaW5rX2NvdW50LCAxKTsKKwkJaWYgKCFyZXQpIHsKKwkJCWRl dl9kYmcoZHAtPmRldiwgImdldCBkcGNkIHN1Y2Nlc3MhXG4iKTsKKworCQkJc2lua19jb3VudCA9 IERQX0dFVF9TSU5LX0NPVU5UKHNpbmtfY291bnQpOworCQkJaWYgKCFzaW5rX2NvdW50KQorCQkJ CXJldHVybiAtRU5PREVWOworCisJCQlyZXQgPSBjZG5fZHBfZHBjZF9yZWFkKGRwLCAweDAwMCwg ZHAtPmRwY2QsCisJCQkJCSAgICAgICBEUF9SRUNFSVZFUl9DQVBfU0laRSk7CisJCQlpZiAocmV0 KQorCQkJCWNvbnRpbnVlOworCisJCQlyZXR1cm4gcmV0OworCQl9IGVsc2UgaWYgKCFleHRjb25f Z2V0X3N0YXRlKHBvcnQtPmV4dGNvbiwgRVhUQ09OX0RJU1BfRFApKSB7CisJCQlicmVhazsKKwkJ fQorCisJCW1zbGVlcCgxMDApOworCX0KKworCWRldl9lcnIoZHAtPmRldiwgImdldCBkcGNkIGZh aWxlZCFcbiIpOworCisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKK3N0YXRpYyB2b2lkIGNkbl9k cF9lbnRlcl9zdGFuZHkoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLAorCQkJCXN0cnVjdCBjZG5f ZHBfcG9ydCAqcG9ydCkKK3sKKwlpbnQgaSwgcmV0OworCisJcmV0ID0gcGh5X3Bvd2VyX29mZihw b3J0LT5waHkpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAicGh5IHBvd2VyIG9m ZiBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKworCXBvcnQtPnBoeV9zdGF0dXMg PSBmYWxzZTsKKwlwb3J0LT5jYXBfbGFuZXMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBkcC0+cG9y dHM7IGkrKykgeworCQlpZiAoZHAtPnBvcnRbaV0tPnBoeV9zdGF0dXMpCisJCQlyZXR1cm47CisJ fQorCisJcmV0ID0gY2RuX2RwX2dyZl93cml0ZShkcCwgR1JGX1NPQ19DT04yNiwKKwkJCSAgICAg ICBEUFRYX0hQRF9TRUxfTUFTSyB8IERQVFhfSFBEX0RFTCk7CisJaWYgKHJldCkKKwkJcmV0dXJu OworCisJbWVtc2V0KGRwLT5kcGNkLCAwLCBEUF9SRUNFSVZFUl9DQVBfU0laRSk7CisJZHAtPmhw ZF9zdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKwlkcm1faGVscGVyX2hw ZF9pcnFfZXZlbnQoZHAtPmRybV9kZXYpOworCWNkbl9kcF9zZXRfZmlybXdhcmVfYWN0aXZlKGRw LCBmYWxzZSk7CisKKwljZG5fZHBfY2xrX2Rpc2FibGUoZHApOworfQorCitzdGF0aWMgaW50IGNk bl9kcF9zdGFydF93b3JrKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwKKwkJCSAgICAgc3RydWN0 IGNkbl9kcF9wb3J0ICpwb3J0LAorCQkJICAgICB1OCBjYXBfbGFuZXMpCit7CisJdW5pb24gZXh0 Y29uX3Byb3BlcnR5X3ZhbHVlIHByb3BlcnR5OworCWludCByZXQ7CisKKwlyZXQgPSByZXF1ZXN0 X2Zpcm13YXJlKCZkcC0+ZncsIENETl9EUF9GSVJNV0FSRSwgZHAtPmRldik7CisJaWYgKHJldCkg eworCQlpZiAocmV0ID09IC1FTk9FTlQgJiYgZHAtPmZ3X3dhaXQgPD0gTUFYX0ZXX1dBSVRfU0VD UykgeworCQkJdW5zaWduZWQgbG9uZyB0aW1lID0gbXNlY3NfdG9famlmZmllcyhkcC0+Zndfd2Fp dCAqIEhaKTsKKworCQkJLyoKKwkJCSAqIElmIGNhbiBub3QgZmluZCB0aGUgZmlsZSwgcmV0cnkg dG8gbG9hZCB0aGUgZmlybXdhcmUKKwkJCSAqIGluIHNldmVyYWwgc2Vjb25kcywgaWYgc3RpbGwg ZmFpbGVkIGFmdGVyIDEgbWludXRlLAorCQkJICogZ2l2ZSB1cC4KKwkJCSAqLworCQkJc2NoZWR1 bGVfZGVsYXllZF93b3JrKCZwb3J0LT5ldmVudF93cSwgdGltZSk7CisJCQlkcC0+Zndfd2FpdCAq PSAyOworCQl9IGVsc2UgeworCQkJZGV2X2VycihkcC0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3Qg ZmlybXdhcmU6ICVkXG4iLAorCQkJCXJldCk7CisJCX0KKworCQlyZXR1cm4gcmV0OworCX0KKwor CXJldCA9IGNkbl9kcF9jbGtfZW5hYmxlKGRwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor CisJcmV0ID0gY2RuX2RwX2dyZl93cml0ZShkcCwgR1JGX1NPQ19DT04yNiwKKwkJCSAgICAgICAo cG9ydC0+aWQgPDwgVVBIWV9TRUxfQklUKSB8IFVQSFlfU0VMX01BU0spOworCWlmIChyZXQpCisJ CWdvdG8gZXJyX3BoeTsKKworCXJldCA9IHBoeV9wb3dlcl9vbihwb3J0LT5waHkpOworCWlmIChy ZXQpIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAicGh5IHBvd2VyIG9uIGZhaWxlZDogJWRcbiIsIHJl dCk7CisJCWdvdG8gZXJyX3BoeTsKKwl9CisKKwlwb3J0LT5waHlfc3RhdHVzID0gdHJ1ZTsKKwor CXJldCA9IGNkbl9kcF9maXJtd2FyZV9pbml0KGRwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIo ZHAtPmRldiwgImZpcm13YXJlIGluaXQgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gZXJyX2Zp cm13YXJlOworCX0KKworCXJldCA9IGNkbl9kcF9ncmZfd3JpdGUoZHAsIEdSRl9TT0NfQ09OMjYs CisJCQkgICAgICAgRFBUWF9IUERfU0VMX01BU0sgfCBEUFRYX0hQRF9TRUwpOworCWlmIChyZXQp CisJCWdvdG8gZXJyX2dyZjsKKworCXJldCA9IGNkbl9kcF9nZXRfaHBkX3N0YXR1cyhkcCk7CisJ aWYgKHJldCA8PSAwKSB7CisJCWlmICghcmV0KQorCQkJZGV2X2VycihkcC0+ZGV2LCAiaHBkIGRv ZXMgbm90IGV4aXN0XG4iKTsKKwkJZ290byBlcnJfaHBkOworCX0KKworCXJldCA9IGV4dGNvbl9n ZXRfcHJvcGVydHkocG9ydC0+ZXh0Y29uLCBFWFRDT05fRElTUF9EUCwKKwkJCQkgIEVYVENPTl9Q Uk9QX1VTQl9UWVBFQ19QT0xBUklUWSwgJnByb3BlcnR5KTsKKwlpZiAocmV0KSB7CisJCWRldl9l cnIoZHAtPmRldiwgImdldCBwcm9wZXJ0eSBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9ocGQ7CisJ fQorCisJcmV0ID0gY2RuX2RwX3NldF9ob3N0X2NhcChkcCwgY2FwX2xhbmVzLCBwcm9wZXJ0eS5p bnR2YWwpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAic2V0IGhvc3QgY2FwYWJp bGl0aWVzIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2hwZDsKKwl9CisKKwlyZXQg PSBjZG5fZHBfZ2V0X2RwY2QoZHAsIHBvcnQpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2hwZDsK KworCXJlbGVhc2VfZmlybXdhcmUoZHAtPmZ3KTsKKwlyZXR1cm4gMDsKKworZXJyX2hwZDoKKwlj ZG5fZHBfZ3JmX3dyaXRlKGRwLCBHUkZfU09DX0NPTjI2LAorCQkJIERQVFhfSFBEX1NFTF9NQVNL IHwgRFBUWF9IUERfREVMKTsKKworZXJyX2dyZjoKKwljZG5fZHBfc2V0X2Zpcm13YXJlX2FjdGl2 ZShkcCwgZmFsc2UpOworCitlcnJfZmlybXdhcmU6CisJaWYgKHBoeV9wb3dlcl9vZmYocG9ydC0+ cGh5KSkKKwkJZGV2X2VycihkcC0+ZGV2LCAicGh5IHBvd2VyIG9mZiBmYWlsZWQ6ICVkIiwgcmV0 KTsKKwllbHNlCisJCXBvcnQtPnBoeV9zdGF0dXMgPSBmYWxzZTsKKworZXJyX3BoeToKKwljZG5f ZHBfY2xrX2Rpc2FibGUoZHApOworCXJlbGVhc2VfZmlybXdhcmUoZHAtPmZ3KTsKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgdm9pZCBjZG5fZHBfcGRfZXZlbnRfd3Eoc3RydWN0IHdvcmtfc3Ry dWN0ICp3b3JrKQoreworCXN0cnVjdCBjZG5fZHBfcG9ydCAqcG9ydCA9IGNvbnRhaW5lcl9vZih3 b3JrLCBzdHJ1Y3QgY2RuX2RwX3BvcnQsCisJCQkJCQlldmVudF93cS53b3JrKTsKKwlzdHJ1Y3Qg Y2RuX2RwX2RldmljZSAqZHAgPSBwb3J0LT5kcDsKKwl1OCBuZXdfY2FwX2xhbmVzLCBzaW5rX2Nv dW50LCBpOworCWludCByZXQ7CisKKwluZXdfY2FwX2xhbmVzID0gY2RuX2RwX2dldF9jYXBfbGFu ZXMoZHAsIHBvcnQtPmV4dGNvbik7CisKKwlpZiAobmV3X2NhcF9sYW5lcyA9PSBwb3J0LT5jYXBf bGFuZXMpIHsKKwkJaWYgKCFuZXdfY2FwX2xhbmVzKQorCQkJcmV0dXJuOworCQkvKgorCQkgKiBJ ZiBIUEQgaW50ZXJydXB0IGlzIHRyaWdnZXJlZCwgYW5kIGNhYmxlIHN0YXRlcyBpcyBzdGlsbAor CQkgKiBhdHRhY2hlZCwgdGhhdCBtZWFucyBzb21ldGhpbmcgb24gdGhlIFR5cGUtQyBEb2NrL0Rv bmdsZQorCQkgKiBjaGFuZ2VkLCBjaGVjayB0aGUgc2luayBjb3VudCBieSBEUENELiBJZiBzaW5r IGNvdW50IGJlY29tZQorCQkgKiAwLCB0aGlzIHBvcnQgcGh5IGNvdWxkIGJlIHBvd2VyIG9mZjsg SWYgc2luayBjb3VudCBkb2VzIG5vdAorCQkgKiBjaGFuZ2UsIGl0IG1lYW5zIHRoZSBzaW5rIGRl dmljZSBzdGF0dXMgaGFzIHVwZGF0ZSwKKwkJICogcmUtdHJhaW5pbmcgdG8gbWFrZSBpdCB3b3Jr cyBhZ2Fpbi4KKwkJICovCisJCXJldCA9IGNkbl9kcF9kcGNkX3JlYWQoZHAsIERQX1NJTktfQ09V TlQsICZzaW5rX2NvdW50LCAxKTsKKwkJaWYgKHJldCB8fCBzaW5rX2NvdW50KSB7CisJCQlpZiAo ZHAtPmRwbXNfbW9kZSA9PSBEUk1fTU9ERV9EUE1TX09OKSB7CisJCQkJcmV0ID0gY2RuX2RwX3Ry YWluaW5nX3N0YXJ0KGRwKTsKKwkJCQlpZiAoIXJldCkKKwkJCQkJY2RuX2RwX2dldF90cmFpbmlu Z19zdGF0dXMoZHApOworCQkJfQorCQkJcmV0dXJuOworCQl9CisKKwkJbmV3X2NhcF9sYW5lcyA9 IDA7CisJfQorCisJaWYgKCFuZXdfY2FwX2xhbmVzKQorCQlyZXR1cm4gY2RuX2RwX2VudGVyX3N0 YW5keShkcCwgcG9ydCk7CisKKwkvKiBpZiBvdGhlciBwaHkgaXMgcnVubmluZywgZG8gbm90IGRv IGFueXRoaW5nLCBqdXN0IHJldHVybiAqLworCWZvciAoaSA9IDA7IGkgPCBkcC0+cG9ydHM7IGkr KykgeworCQlpZiAoZHAtPnBvcnRbaV0tPnBoeV9zdGF0dXMpIHsKKwkJCWRldl93YXJuKGRwLT5k ZXYsICJidXN5LCBwaHlbJWRdIGlzIHJ1bm5pbmciLAorCQkJCSBkcC0+cG9ydFtpXS0+aWQpOwor CQkJcmV0dXJuOworCQl9CisJfQorCisJcmV0ID0gY2RuX2RwX3N0YXJ0X3dvcmsoZHAsIHBvcnQs IG5ld19jYXBfbGFuZXMpOworCWlmIChyZXQpCisJCXJldHVybjsKKworCXBvcnQtPmNhcF9sYW5l cyA9IG5ld19jYXBfbGFuZXM7CisJZHAtPmhwZF9zdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Nv bm5lY3RlZDsKKwlkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQoZHAtPmRybV9kZXYpOworfQorCitz dGF0aWMgaW50IGNkbl9kcF9wZF9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJ ICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3QgY2RuX2RwX3Bv cnQgKnBvcnQ7CisKKwlwb3J0ID0gY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgY2RuX2RwX3BvcnQs IGV2ZW50X25iKTsKKworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcG9ydC0+ZXZlbnRfd3EsIDAp OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX2JpbmQoc3RydWN0IGRldmlj ZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNk bl9kcF9kZXZpY2UgKmRwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9lbmNv ZGVyICplbmNvZGVyOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0 IGNkbl9kcF9wb3J0ICpwb3J0OworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZGF0YTsK KwlpbnQgcmV0LCBpOworCisJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKKworCXJldCA9IGNkbl9k cF9wYXJzZV9kdChkcCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlkcC0+ZHJt X2RldiA9IGRybV9kZXY7CisJZHAtPmhwZF9zdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nv bm5lY3RlZDsKKwlkcC0+ZHBtc19tb2RlID0gRFJNX01PREVfRFBNU19PRkY7CisJZHAtPmZ3X3dh aXQgPSAxOworCisJZW5jb2RlciA9ICZkcC0+ZW5jb2RlcjsKKworCWVuY29kZXItPnBvc3NpYmxl X2NydGNzID0gZHJtX29mX2ZpbmRfcG9zc2libGVfY3J0Y3MoZHJtX2RldiwKKwkJCQkJCQkgICAg IGRldi0+b2Zfbm9kZSk7CisJRFJNX0RFQlVHX0tNUygicG9zc2libGVfY3J0Y3MgPSAweCV4XG4i LCBlbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyk7CisKKwlyZXQgPSBkcm1fZW5jb2Rlcl9pbml0KGRy bV9kZXYsIGVuY29kZXIsICZjZG5fZHBfZW5jb2Rlcl9mdW5jcywKKwkJCSAgICAgICBEUk1fTU9E RV9FTkNPREVSX1RNRFMsIE5VTEwpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQg dG8gaW5pdGlhbGl6ZSBlbmNvZGVyIHdpdGggZHJtXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisK Kwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKGVuY29kZXIsICZjZG5fZHBfZW5jb2Rlcl9oZWxwZXJf ZnVuY3MpOworCisJY29ubmVjdG9yID0gJmRwLT5jb25uZWN0b3I7CisJY29ubmVjdG9yLT5wb2xs ZWQgPSBEUk1fQ09OTkVDVE9SX1BPTExfSFBEOworCWNvbm5lY3Rvci0+ZHBtcyA9IERSTV9NT0RF X0RQTVNfT0ZGOworCisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9pbml0KGRybV9kZXYsIGNvbm5lY3Rv ciwKKwkJCQkgJmNkbl9kcF9hdG9taWNfY29ubmVjdG9yX2Z1bmNzLAorCQkJCSBEUk1fTU9ERV9D T05ORUNUT1JfRGlzcGxheVBvcnQpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQg dG8gaW5pdGlhbGl6ZSBjb25uZWN0b3Igd2l0aCBkcm1cbiIpOworCQlnb3RvIGVycl9mcmVlX2Vu Y29kZXI7CisJfQorCisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwgJmNkbl9k cF9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKworCXJldCA9IGRybV9tb2RlX2Nvbm5lY3Rvcl9h dHRhY2hfZW5jb2Rlcihjb25uZWN0b3IsIGVuY29kZXIpOworCWlmIChyZXQpIHsKKwkJRFJNX0VS Uk9SKCJmYWlsZWQgdG8gYXR0YWNoIGNvbm5lY3RvciBhbmQgZW5jb2RlclxuIik7CisJCWdvdG8g ZXJyX2ZyZWVfY29ubmVjdG9yOworCX0KKworCWNkbl9kcF9hdWRpb19jb2RlY19pbml0KGRwLCBk ZXYpOworCisJZm9yIChpID0gMDsgaSA8IGRwLT5wb3J0czsgaSsrKSB7CisJCXBvcnQgPSBkcC0+ cG9ydFtpXTsKKworCQlwb3J0LT5ldmVudF9uYi5ub3RpZmllcl9jYWxsID0gY2RuX2RwX3BkX2V2 ZW50OworCQlJTklUX0RFTEFZRURfV09SSygmcG9ydC0+ZXZlbnRfd3EsIGNkbl9kcF9wZF9ldmVu dF93cSk7CisJCXJldCA9IGV4dGNvbl9yZWdpc3Rlcl9ub3RpZmllcihwb3J0LT5leHRjb24sIEVY VENPTl9ESVNQX0RQLAorCQkJCQkgICAgICAgJnBvcnQtPmV2ZW50X25iKTsKKwkJaWYgKHJldCkg eworCQkJZGV2X2VycihkZXYsICJyZWdpc3RlciBFWFRDT05fRElTUF9EUCBub3RpZmllciBlcnJc biIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWlmIChleHRjb25fZ2V0X3N0YXRlKHBvcnQt PmV4dGNvbiwgRVhUQ09OX0RJU1BfRFApKQorCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwb3J0 LT5ldmVudF93cSwgMCk7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2Nvbm5lY3RvcjoK Kwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKK2Vycl9mcmVlX2VuY29kZXI6CisJ ZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg dm9pZCBjZG5fZHBfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFz dGVyLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9ICZkcC0+ZW5jb2Rl cjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gJmRwLT5jb25uZWN0b3I7CisJ c3RydWN0IGNkbl9kcF9wb3J0ICpwb3J0OworCWludCBpOworCisJcGxhdGZvcm1fZGV2aWNlX3Vu cmVnaXN0ZXIoZHAtPmF1ZGlvX3BkZXYpOworCWNkbl9kcF9lbmNvZGVyX2Rpc2FibGUoZW5jb2Rl cik7CisJZW5jb2Rlci0+ZnVuY3MtPmRlc3Ryb3koZW5jb2Rlcik7CisJY29ubmVjdG9yLT5mdW5j cy0+ZGVzdHJveShjb25uZWN0b3IpOworCisJZm9yIChpID0gMDsgaSA8IGRwLT5wb3J0czsgaSsr KSB7CisJCXBvcnQgPSBkcC0+cG9ydFtpXTsKKwkJZXh0Y29uX3VucmVnaXN0ZXJfbm90aWZpZXIo cG9ydC0+ZXh0Y29uLCBFWFRDT05fRElTUF9EUCwKKwkJCQkJICAgJnBvcnQtPmV2ZW50X25iKTsK Kwl9CisKKwlwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBjb21wb25lbnRfb3BzIGNkbl9kcF9jb21wb25lbnRfb3BzID0geworCS5iaW5kID0gY2RuX2Rw X2JpbmQsCisJLnVuYmluZCA9IGNkbl9kcF91bmJpbmQsCit9OworCitpbnQgY2RuX2RwX3N1c3Bl bmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBjZG5fZHBfcG9ydCAqcG9ydDsKKwlpbnQgaTsK KworCWZvciAoaSA9IDA7IGkgPCBkcC0+cG9ydHM7IGkrKykgeworCQlwb3J0ID0gZHAtPnBvcnRb aV07CisJCWlmIChwb3J0LT5waHlfc3RhdHVzKSB7CisJCQljZG5fZHBfZHBjZF93cml0ZShkcCwg RFBfU0VUX1BPV0VSLCBEUF9TRVRfUE9XRVJfRDMpOworCQkJZHAtPnN1c3BlbmQgPSB0cnVlOwor CQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwb3J0LT5ldmVudF93cSwgMCk7CisJCX0KKwl9CisK KwlyZXR1cm4gMDsKK30KKworaW50IGNkbl9kcF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQor eworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0 cnVjdCBjZG5fZHBfcG9ydCAqcG9ydDsKKwlpbnQgaTsKKworCWlmIChkcC0+c3VzcGVuZCkgewor CQlkcC0+c3VzcGVuZCA9IGZhbHNlOworCQlmb3IgKGkgPSAwOyBpIDwgZHAtPnBvcnRzOyBpKysp IHsKKwkJCXBvcnQgPSBkcC0+cG9ydFtpXTsKKwkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcG9y dC0+ZXZlbnRfd3EsIDApOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg Y2RuX2RwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRl dmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRj aDsKKwlzdHJ1Y3QgY2RuX2RwX2RhdGEgKmRwX2RhdGE7CisJc3RydWN0IGNkbl9kcF9wb3J0ICpw b3J0OworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcDsKKwlzdHJ1Y3QgZXh0Y29uX2RldiAqZXh0 Y29uOworCXN0cnVjdCBwaHkgKnBoeTsKKwlpbnQgaTsKKworCWRwID0gZGV2bV9remFsbG9jKGRl diwgc2l6ZW9mKCpkcCksIEdGUF9LRVJORUwpOworCWlmICghZHApCisJCXJldHVybiAtRU5PTUVN OworCWRwLT5kZXYgPSBkZXY7CisKKwltYXRjaCA9IG9mX21hdGNoX25vZGUoY2RuX2RwX2R0X2lk cywgcGRldi0+ZGV2Lm9mX25vZGUpOworCWRwX2RhdGEgPSAoc3RydWN0IGNkbl9kcF9kYXRhICop bWF0Y2gtPmRhdGE7CisKKwlmb3IgKGkgPSAwOyBpIDwgZHBfZGF0YS0+bWF4X3BoeTsgaSsrKSB7 CisJCWV4dGNvbiA9IGV4dGNvbl9nZXRfZWRldl9ieV9waGFuZGxlKGRldiwgaSk7CisJCXBoeSA9 IGRldm1fb2ZfcGh5X2dldF9ieV9pbmRleChkZXYsIGRldi0+b2Zfbm9kZSwgaSk7CisKKwkJaWYg KFBUUl9FUlIoZXh0Y29uKSA9PSAtRVBST0JFX0RFRkVSIHx8CisJCSAgICBQVFJfRVJSKHBoeSkg PT0gLUVQUk9CRV9ERUZFUikKKwkJCXJldHVybiAtRVBST0JFX0RFRkVSOworCisJCWlmIChJU19F UlIoZXh0Y29uKSB8fCBJU19FUlIocGh5KSkKKwkJCWNvbnRpbnVlOworCisJCXBvcnQgPSBkZXZt X2t6YWxsb2MoZGV2LCBzaXplb2YoKnBvcnQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFkcCkKKwkJ CXJldHVybiAtRU5PTUVNOworCisJCXBvcnQtPmV4dGNvbiA9IGV4dGNvbjsKKwkJcG9ydC0+cGh5 ID0gcGh5OworCQlwb3J0LT5kcCA9IGRwOworCQlwb3J0LT5pZCA9IGk7CisJCWRwLT5wb3J0W2Rw LT5wb3J0cysrXSA9IHBvcnQ7CisJfQorCisJaWYgKCFkcC0+cG9ydHMpIHsKKwkJZGV2X2Vycihk ZXYsICJtaXNzaW5nIGV4dGNvbiBvciBwaHlcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisK KwlkZXZfc2V0X2RydmRhdGEoZGV2LCBkcCk7CisKKwlyZXR1cm4gY29tcG9uZW50X2FkZChkZXYs ICZjZG5fZHBfY29tcG9uZW50X29wcyk7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX3JlbW92ZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRl diwgJmNkbl9kcF9jb21wb25lbnRfb3BzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29u c3Qgc3RydWN0IGRldl9wbV9vcHMgY2RuX2RwX3BtX29wcyA9IHsKKwlTRVRfU1lTVEVNX1NMRUVQ X1BNX09QUyhjZG5fZHBfc3VzcGVuZCwKKwkJCQljZG5fZHBfcmVzdW1lKQorfTsKKworc3RhdGlj IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY2RuX2RwX2RyaXZlciA9IHsKKwkucHJvYmUgPSBjZG5f ZHBfcHJvYmUsCisJLnJlbW92ZSA9IGNkbl9kcF9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJICAg Lm5hbWUgPSAiY2RuLWRwIiwKKwkJICAgLm93bmVyID0gVEhJU19NT0RVTEUsCisJCSAgIC5vZl9t YXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihjZG5fZHBfZHRfaWRzKSwKKwkJICAgLnBtID0gJmNk bl9kcF9wbV9vcHMsCisJfSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoY2RuX2RwX2Ry aXZlcik7CisKK01PRFVMRV9BVVRIT1IoIkNocmlzIFpob25nIDx6eXdAcm9jay1jaGlwcy5jb20+ Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oImNkbiBEUCBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNF KCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAt Y29yZS5oIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1jb3JlLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUwZGQ3YgotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtY29yZS5oCkBAIC0wLDAgKzEsMTA2IEBACisv KgorICogQ29weXJpZ2h0IChDKSAyMDE2IENocmlzIFpob25nIDx6eXdAcm9jay1jaGlwcy5jb20+ CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgUk9DS0NISVAsIEluYy4KKyAqCisgKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq LworCisjaWZuZGVmIF9DRE5fRFBfQ09SRV9ICisjZGVmaW5lIF9DRE5fRFBfQ09SRV9ICisKKyNp bmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX2RwX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4K KyNpbmNsdWRlICJyb2NrY2hpcF9kcm1fZHJ2LmgiCisKKyNkZWZpbmUgTUFYX1BIWQkJMgorCitl bnVtIGF1ZGlvX2Zvcm1hdCB7CisJQUZNVF9JMlMgPSAwLAorCUFGTVRfU1BESUYgPSAxLAorCUFG TVRfVU5VU0VELAorfTsKKworc3RydWN0IGF1ZGlvX2luZm8geworCWVudW0gYXVkaW9fZm9ybWF0 IGZvcm1hdDsKKwlpbnQgc2FtcGxlX3JhdGU7CisJaW50IGNoYW5uZWxzOworCWludCBzYW1wbGVf d2lkdGg7Cit9OworCitlbnVtIHZpY19weGxfZW5jb2RpbmdfZm9ybWF0IHsKKwlQWExfUkdCID0g MHgxLAorCVlDQkNSXzRfNF80ID0gMHgyLAorCVlDQkNSXzRfMl8yID0gMHg0LAorCVlDQkNSXzRf Ml8wID0gMHg4LAorCVlfT05MWSA9IDB4MTAsCit9OworCitzdHJ1Y3QgdmlkZW9faW5mbyB7CisJ Ym9vbCBoX3N5bmNfcG9sYXJpdHk7CisJYm9vbCB2X3N5bmNfcG9sYXJpdHk7CisJYm9vbCBpbnRl cmxhY2VkOworCWludCBjb2xvcl9kZXB0aDsKKwllbnVtIHZpY19weGxfZW5jb2RpbmdfZm9ybWF0 IGNvbG9yX2ZtdDsKK307CisKK3N0cnVjdCBjZG5fZmlybXdhcmVfaGVhZGVyIHsKKwl1MzIgc2l6 ZV9ieXRlczsgLyogc2l6ZSBvZiB0aGUgZW50aXJlIGhlYWRlcitpbWFnZShzKSBpbiBieXRlcyAq LworCXUzMiBoZWFkZXJfc2l6ZTsgLyogc2l6ZSBvZiBqdXN0IHRoZSBoZWFkZXIgaW4gYnl0ZXMg Ki8KKwl1MzIgaXJhbV9zaXplOyAvKiBzaXplIG9mIGlyYW0gKi8KKwl1MzIgZHJhbV9zaXplOyAv KiBzaXplIG9mIGRyYW0gKi8KK307CisKK3N0cnVjdCBjZG5fZHBfcG9ydCB7CisJc3RydWN0IGNk bl9kcF9kZXZpY2UgKmRwOworCXN0cnVjdCBub3RpZmllcl9ibG9jayBldmVudF9uYjsKKwlzdHJ1 Y3QgZGVsYXllZF93b3JrIGV2ZW50X3dxOworCXN0cnVjdCBleHRjb25fZGV2ICpleHRjb247CisJ c3RydWN0IHBoeSAqcGh5OworCXU4IGNhcF9sYW5lczsKKwlib29sIHBoeV9zdGF0dXM7CisJdTgg aWQ7Cit9OworCitzdHJ1Y3QgY2RuX2RwX2RldmljZSB7CisJc3RydWN0IGRldmljZSAqZGV2Owor CXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2OworCXN0cnVjdCBkcm1fY29ubmVjdG9yIGNvbm5l Y3RvcjsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSBtb2RlOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmF1ZGlvX3BkZXY7CisKKwljb25z dCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwkvKiBjZG4gZHAgZmlybXdhcmUgKi8KKwl1bnNpZ25lZCBp bnQgZndfdmVyc2lvbjsJLyogY2RuIGZ3IHZlcnNpb24gKi8KKwl1MzIgZndfd2FpdDsKKwlib29s IGZ3X2FjdGl2ZWQ7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCByZWdtYXAgKmdyZjsK KwlzdHJ1Y3QgY2xrICpjb3JlX2NsazsKKwlzdHJ1Y3QgY2xrICpwY2xrOworCXN0cnVjdCBjbGsg KnNwZGlmX2NsazsKKwlzdHJ1Y3QgY2xrICpncmZfY2xrOworCXN0cnVjdCByZXNldF9jb250cm9s ICpzcGRpZl9yc3Q7CisJc3RydWN0IHJlc2V0X2NvbnRyb2wgKmRwdHhfcnN0OworCXN0cnVjdCBy ZXNldF9jb250cm9sICphcGJfcnN0OworCXN0cnVjdCBhdWRpb19pbmZvIGF1ZGlvX2luZm87CisJ c3RydWN0IHZpZGVvX2luZm8gdmlkZW9faW5mbzsKKwlzdHJ1Y3QgZHJtX2RwX2xpbmsgbGluazsK KwlzdHJ1Y3QgY2RuX2RwX3BvcnQgKnBvcnRbTUFYX1BIWV07CisJdTggcG9ydHM7CisKKwl1OCBk cGNkW0RQX1JFQ0VJVkVSX0NBUF9TSVpFXTsKKwllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIGhw ZF9zdGF0dXM7CisJaW50IGRwbXNfbW9kZTsKKwlib29sIHN1c3BlbmQ7CisJYm9vbCBzaW5rX2hh c19hdWRpbzsKK307CisjZW5kaWYgIC8qIF9DRE5fRFBfQ09SRV9IICovCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLXJlZy5jIGIvZHJpdmVycy9ncHUvZHJtL3Jv Y2tjaGlwL2Nkbi1kcC1yZWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4y ZWE3MDJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1k cC1yZWcuYwpAQCAtMCwwICsxLDk1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgRnV6aG91IFJv Y2tjaGlwIEVsZWN0cm9uaWNzIENvLkx0ZAorICogQXV0aG9yOiBDaHJpcyBaaG9uZyA8enl3QHJv Y2stY2hpcHMuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkg YmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgor I2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5j bHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KKyNpbmNsdWRlIDxs aW51eC9yZXNldC5oPgorCisjaW5jbHVkZSAiY2RuLWRwLWNvcmUuaCIKKyNpbmNsdWRlICJjZG4t ZHAtcmVnLmgiCisKKyNkZWZpbmUgQ0ROX0RQX1NQRElGX0NMSwkJMjAwMDAwMDAwCisjZGVmaW5l IEZXX0FMSVZFX1RJTUVPVVRfVVMJCTEwMDAwMDAKKyNkZWZpbmUgTUFJTEJPWF9SRVRSWV9VUwkJ MTAwMAorI2RlZmluZSBNQUlMQk9YX1RJTUVPVVRfVVMJCTUwMDAwMDAKKyNkZWZpbmUgTElOS19U UkFJTklOR19SRVRSWV9NUwkJMjAKKyNkZWZpbmUgTElOS19UUkFJTklOR19USU1FT1VUX01TCTUw MAorCit2b2lkIGNkbl9kcF9zZXRfZndfY2xrKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgdTMy IGNsaykKK3sKKwl3cml0ZWwoY2xrIC8gMTAwMDAwMCwgZHAtPnJlZ3MgKyBTV19DTEtfSCk7Cit9 CisKK3ZvaWQgY2RuX2RwX2Nsb2NrX3Jlc2V0KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCkKK3sK Kwl1MzIgdmFsOworCisJdmFsID0gRFBUWF9GUk1SX0RBVEFfQ0xLX1JTVE5fRU4gfAorCSAgICAg IERQVFhfRlJNUl9EQVRBX0NMS19FTiB8CisJICAgICAgRFBUWF9QSFlfREFUQV9SU1ROX0VOIHwK KwkgICAgICBEUFRYX1BIWV9EQVRBX0NMS19FTiB8CisJICAgICAgRFBUWF9QSFlfQ0hBUl9SU1RO X0VOIHwKKwkgICAgICBEUFRYX1BIWV9DSEFSX0NMS19FTiB8CisJICAgICAgU09VUkNFX0FVWF9T WVNfQ0xLX1JTVE5fRU4gfAorCSAgICAgIFNPVVJDRV9BVVhfU1lTX0NMS19FTiB8CisJICAgICAg RFBUWF9TWVNfQ0xLX1JTVE5fRU4gfAorCSAgICAgIERQVFhfU1lTX0NMS19FTiB8CisJICAgICAg Q0ZHX0RQVFhfVklGX0NMS19SU1ROX0VOIHwKKwkgICAgICBDRkdfRFBUWF9WSUZfQ0xLX0VOOwor CXdyaXRlbCh2YWwsIGRwLT5yZWdzICsgU09VUkNFX0RQVFhfQ0FSKTsKKworCXZhbCA9IFNPVVJD RV9QSFlfUlNUTl9FTiB8IFNPVVJDRV9QSFlfQ0xLX0VOOworCXdyaXRlbCh2YWwsIGRwLT5yZWdz ICsgU09VUkNFX1BIWV9DQVIpOworCisJdmFsID0gU09VUkNFX1BLVF9TWVNfUlNUTl9FTiB8CisJ ICAgICAgU09VUkNFX1BLVF9TWVNfQ0xLX0VOIHwKKwkgICAgICBTT1VSQ0VfUEtUX0RBVEFfUlNU Tl9FTiB8CisJICAgICAgU09VUkNFX1BLVF9EQVRBX0NMS19FTjsKKwl3cml0ZWwodmFsLCBkcC0+ cmVncyArIFNPVVJDRV9QS1RfQ0FSKTsKKworCXZhbCA9IFNQRElGX0NEUl9DTEtfUlNUTl9FTiB8 CisJICAgICAgU1BESUZfQ0RSX0NMS19FTiB8CisJICAgICAgU09VUkNFX0FJRl9TWVNfUlNUTl9F TiB8CisJICAgICAgU09VUkNFX0FJRl9TWVNfQ0xLX0VOIHwKKwkgICAgICBTT1VSQ0VfQUlGX0NM S19SU1ROX0VOIHwKKwkgICAgICBTT1VSQ0VfQUlGX0NMS19FTjsKKwl3cml0ZWwodmFsLCBkcC0+ cmVncyArIFNPVVJDRV9BSUZfQ0FSKTsKKworCXZhbCA9IFNPVVJDRV9DSVBIRVJfU1lTVEVNX0NM S19SU1ROX0VOIHwKKwkgICAgICBTT1VSQ0VfQ0lQSEVSX1NZU19DTEtfRU4gfAorCSAgICAgIFNP VVJDRV9DSVBIRVJfQ0hBUl9DTEtfUlNUTl9FTiB8CisJICAgICAgU09VUkNFX0NJUEhFUl9DSEFS X0NMS19FTjsKKwl3cml0ZWwodmFsLCBkcC0+cmVncyArIFNPVVJDRV9DSVBIRVJfQ0FSKTsKKwor CXZhbCA9IFNPVVJDRV9DUllQVE9fU1lTX0NMS19SU1ROX0VOIHwKKwkgICAgICBTT1VSQ0VfQ1JZ UFRPX1NZU19DTEtfRU47CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBTT1VSQ0VfQ1JZUFRPX0NB Uik7CisKKwl2YWwgPSB+KE1BSUxCT1hfSU5UX01BU0tfQklUIHwgUElGX0lOVF9NQVNLX0JJVCkg JiBBTExfSU5UX01BU0s7CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBBUEJfSU5UX01BU0spOwor fQorCitzdGF0aWMgaW50IGNkbl9kcF9tYWlsYm94X3JlYWQoc3RydWN0IGNkbl9kcF9kZXZpY2Ug KmRwLCBib29sIGZvcmNlKQoreworCWludCB2YWwsIHJldDsKKworCWlmICghZHAtPmZ3X2FjdGl2 ZWQgJiYgIWZvcmNlKQorCQlyZXR1cm4gLUVQRVJNOworCisJcmV0ID0gcmVhZHhfcG9sbF90aW1l b3V0KHJlYWRsLCBkcC0+cmVncyArIE1BSUxCT1hfRU1QVFlfQUREUiwKKwkJCQkgdmFsLCAhdmFs LCBNQUlMQk9YX1JFVFJZX1VTLAorCQkJCSBNQUlMQk9YX1RJTUVPVVRfVVMpOworCWlmIChyZXQg PCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHJlYWRsKGRwLT5yZWdzICsgTUFJTEJPWDBf UkRfREFUQSkgJiAweGZmOworfQorCitzdGF0aWMgaW50IGNkcF9kcF9tYWlsYm94X3dyaXRlKHN0 cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgdTggdmFsLCBib29sIGZvcmNlKQoreworCWludCByZXQs IGZ1bGw7CisKKwlpZiAoIWRwLT5md19hY3RpdmVkICYmICFmb3JjZSkKKwkJcmV0dXJuIC1FUEVS TTsKKworCXJldCA9IHJlYWR4X3BvbGxfdGltZW91dChyZWFkbCwgZHAtPnJlZ3MgKyBNQUlMQk9Y X0ZVTExfQUREUiwKKwkJCQkgZnVsbCwgIWZ1bGwsIE1BSUxCT1hfUkVUUllfVVMsCisJCQkJIE1B SUxCT1hfVElNRU9VVF9VUyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwl3cml0 ZWwodmFsLCBkcC0+cmVncyArIE1BSUxCT1gwX1dSX0RBVEEpOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgY2RuX2RwX21haWxib3hfdmFsaWRhdGVfcmVjZWl2ZShzdHJ1Y3QgY2RuX2Rw X2RldmljZSAqZHAsCisJCQkJCSAgIHU4IG1vZHVsZV9pZCwgdTggb3Bjb2RlLAorCQkJCQkgICB1 OCByZXFfc2l6ZSkKK3sKKwl1MzIgbWJveF9zaXplLCBpOworCXU4IGhlYWRlcls0XTsKKwlpbnQg cmV0OworCisJLyogcmVhZCB0aGUgaGVhZGVyIG9mIHRoZSBtZXNzYWdlICovCisJZm9yIChpID0g MDsgaSA8IDQ7IGkrKykgeworCQlyZXQgPSBjZG5fZHBfbWFpbGJveF9yZWFkKGRwLCAwKTsKKwkJ aWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCWhlYWRlcltpXSA9IHJldDsKKwl9CisK KwltYm94X3NpemUgPSAoaGVhZGVyWzJdIDw8IDgpIHwgaGVhZGVyWzNdOworCisJaWYgKG9wY29k ZSAhPSBoZWFkZXJbMF0gfHwgbW9kdWxlX2lkICE9IGhlYWRlclsxXSB8fAorCSAgICByZXFfc2l6 ZSAhPSBtYm94X3NpemUpIHsKKwkJLyoKKwkJICogSWYgdGhlIG1lc3NhZ2UgaW4gbWFpbGJveCBp cyBub3Qgd2hhdCB3ZSB3YW50LCB3ZSBuZWVkIHRvCisJCSAqIGNsZWFyIHRoZSBtYWlsYm94IGJ5 IHJlYWQuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgbWJveF9zaXplOyBpKyspCisJCQlpZiAo Y2RuX2RwX21haWxib3hfcmVhZChkcCwgMCkgPCAwKQorCQkJCWJyZWFrOworCisJCXJldHVybiAt RUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9tYWlsYm94 X3JlYWRfcmVjZWl2ZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsCisJCQkJICAgICAgIHU4ICpi dWZmLCB1OCBidWZmX3NpemUpCit7CisJdTMyIGk7CisJaW50IHJldDsKKworCWZvciAoaSA9IDA7 IGkgPCBidWZmX3NpemU7IGkrKykgeworCQlyZXQgPSBjZG5fZHBfbWFpbGJveF9yZWFkKGRwLCAw KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCWJ1ZmZbaV0gPSByZXQ7CisJ fQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX21haWxib3hfc2VuZChzdHJ1 Y3QgY2RuX2RwX2RldmljZSAqZHAsIHU4IG1vZHVsZV9pZCwKKwkJCSAgICAgICB1OCBvcGNvZGUs IHUxNiBzaXplLCB1OCAqbWVzc2FnZSkKK3sKKwl1OCBoZWFkZXJbNF07CisJaW50IHJldCwgaTsK KworCWhlYWRlclswXSA9IG9wY29kZTsKKwloZWFkZXJbMV0gPSBtb2R1bGVfaWQ7CisJaGVhZGVy WzJdID0gKHNpemUgPj4gOCkgJiAweGZmOworCWhlYWRlclszXSA9IHNpemUgJiAweGZmOworCisJ Zm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlyZXQgPSBjZHBfZHBfbWFpbGJveF93cml0ZShk cCwgaGVhZGVyW2ldLCAwKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJZm9y IChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQlyZXQgPSBjZHBfZHBfbWFpbGJveF93cml0ZShk cCwgbWVzc2FnZVtpXSwgMCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9yZWdfd3JpdGUoc3RydWN0IGNkbl9kcF9k ZXZpY2UgKmRwLCB1MTYgYWRkciwgdTMyIHZhbCkKK3sKKwl1OCBtc2dbNl07CisKKwltc2dbMF0g PSAoYWRkciA+PiA4KSAmIDB4ZmY7CisJbXNnWzFdID0gYWRkciAmIDB4ZmY7CisJbXNnWzJdID0g KHZhbCA+PiAyNCkgJiAweGZmOworCW1zZ1szXSA9ICh2YWwgPj4gMTYpICYgMHhmZjsKKwltc2db NF0gPSAodmFsID4+IDgpICYgMHhmZjsKKwltc2dbNV0gPSB2YWwgJiAweGZmOworCXJldHVybiBj ZG5fZHBfbWFpbGJveF9zZW5kKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsIERQVFhfV1JJVEVfUkVH SVNURVIsCisJCQkJICAgc2l6ZW9mKG1zZyksIG1zZyk7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2Rw X3JlZ193cml0ZV9iaXQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1MTYgYWRkciwKKwkJCQl1 OCBzdGFydF9iaXQsIHU4IGJpdHNfbm8sIHUzMiB2YWwpCit7CisJdTggZmllbGRbOF07CisKKwlm aWVsZFswXSA9IChhZGRyID4+IDgpICYgMHhmZjsKKwlmaWVsZFsxXSA9IGFkZHIgJiAweGZmOwor CWZpZWxkWzJdID0gc3RhcnRfYml0OworCWZpZWxkWzNdID0gYml0c19ubzsKKwlmaWVsZFs0XSA9 ICh2YWwgPj4gMjQpICYgMHhmZjsKKwlmaWVsZFs1XSA9ICh2YWwgPj4gMTYpICYgMHhmZjsKKwlm aWVsZFs2XSA9ICh2YWwgPj4gOCkgJiAweGZmOworCWZpZWxkWzddID0gdmFsICYgMHhmZjsKKwor CXJldHVybiBjZG5fZHBfbWFpbGJveF9zZW5kKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsIERQVFhf V1JJVEVfRklFTEQsCisJCQkJICAgc2l6ZW9mKGZpZWxkKSwgZmllbGQpOworfQorCitpbnQgY2Ru X2RwX2RwY2RfcmVhZChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHUzMiBhZGRyLCB1OCAqZGF0 YSwgdTE2IGxlbikKK3sKKwl1OCBtc2dbNV0sIHJlZ1s1XTsKKwlpbnQgcmV0OworCisJbXNnWzBd ID0gKGxlbiA+PiA4KSAmIDB4ZmY7CisJbXNnWzFdID0gbGVuICYgMHhmZjsKKwltc2dbMl0gPSAo YWRkciA+PiAxNikgJiAweGZmOworCW1zZ1szXSA9IChhZGRyID4+IDgpICYgMHhmZjsKKwltc2db NF0gPSBhZGRyICYgMHhmZjsKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF9zZW5kKGRwLCBNQl9NT0RV TEVfSURfRFBfVFgsIERQVFhfUkVBRF9EUENELAorCQkJCSAgc2l6ZW9mKG1zZyksIG1zZyk7CisJ aWYgKHJldCkKKwkJZ290byBlcnJfZHBjZF9yZWFkOworCisJcmV0ID0gY2RuX2RwX21haWxib3hf dmFsaWRhdGVfcmVjZWl2ZShkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLAorCQkJCQkgICAgICBEUFRY X1JFQURfRFBDRCwKKwkJCQkJICAgICAgc2l6ZW9mKHJlZykgKyBsZW4pOworCWlmIChyZXQpCisJ CWdvdG8gZXJyX2RwY2RfcmVhZDsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3JlYWRfcmVjZWl2 ZShkcCwgcmVnLCBzaXplb2YocmVnKSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZHBjZF9yZWFk OworCisJcmV0ID0gY2RuX2RwX21haWxib3hfcmVhZF9yZWNlaXZlKGRwLCBkYXRhLCBsZW4pOwor CitlcnJfZHBjZF9yZWFkOgorCXJldHVybiByZXQ7Cit9CisKK2ludCBjZG5fZHBfZHBjZF93cml0 ZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHUzMiBhZGRyLCB1OCB2YWx1ZSkKK3sKKwl1OCBt c2dbNl0sIHJlZ1s1XTsKKwlpbnQgcmV0OworCisJbXNnWzBdID0gMDsKKwltc2dbMV0gPSAxOwor CW1zZ1syXSA9IChhZGRyID4+IDE2KSAmIDB4ZmY7CisJbXNnWzNdID0gKGFkZHIgPj4gOCkgJiAw eGZmOworCW1zZ1s0XSA9IGFkZHIgJiAweGZmOworCW1zZ1s1XSA9IHZhbHVlOworCXJldCA9IGNk bl9kcF9tYWlsYm94X3NlbmQoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwgRFBUWF9XUklURV9EUENE LAorCQkJCSAgc2l6ZW9mKG1zZyksIG1zZyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZHBjZF93 cml0ZTsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3ZhbGlkYXRlX3JlY2VpdmUoZHAsIE1CX01P RFVMRV9JRF9EUF9UWCwKKwkJCQkJICAgICAgRFBUWF9XUklURV9EUENELCBzaXplb2YocmVnKSk7 CisJaWYgKHJldCkKKwkJZ290byBlcnJfZHBjZF93cml0ZTsKKworCXJldCA9IGNkbl9kcF9tYWls Ym94X3JlYWRfcmVjZWl2ZShkcCwgcmVnLCBzaXplb2YocmVnKSk7CisJaWYgKHJldCkKKwkJZ290 byBlcnJfZHBjZF93cml0ZTsKKworCWlmIChhZGRyICE9IChyZWdbMl0gPDwgMTYgfCByZWdbM10g PDwgOCB8IHJlZ1s0XSkpCisJCXJldCA9IC1FSU5WQUw7CisKK2Vycl9kcGNkX3dyaXRlOgorCWlm IChyZXQpCisJCWRldl9lcnIoZHAtPmRldiwgImRwY2Qgd3JpdGUgZmFpbGVkOiAlZFxuIiwgcmV0 KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgY2RuX2RwX2xvYWRfZmlybXdhcmUoc3RydWN0IGNk bl9kcF9kZXZpY2UgKmRwLCBjb25zdCB1MzIgKmlfbWVtLAorCQkJIHUzMiBpX3NpemUsIGNvbnN0 IHUzMiAqZF9tZW0sIHUzMiBkX3NpemUpCit7CisJdTMyIHJlZzsKKwlpbnQgaSwgcmV0OworCisJ LyogcmVzZXQgdWNwdSBiZWZvcmUgbG9hZCBmaXJtd2FyZSovCisJd3JpdGVsKEFQQl9JUkFNX1BB VEggfCBBUEJfRFJBTV9QQVRIIHwgQVBCX1hUX1JFU0VULAorCSAgICAgICBkcC0+cmVncyArIEFQ Ql9DVFJMKTsKKworCWZvciAoaSA9IDA7IGkgPCBpX3NpemU7IGkgKz0gNCkKKwkJd3JpdGVsKCpp X21lbSsrLCBkcC0+cmVncyArIEFERFJfSU1FTSArIGkpOworCisJZm9yIChpID0gMDsgaSA8IGRf c2l6ZTsgaSArPSA0KQorCQl3cml0ZWwoKmRfbWVtKyssIGRwLT5yZWdzICsgQUREUl9ETUVNICsg aSk7CisKKwkvKiB1bi1yZXNldCB1Y3B1ICovCisJd3JpdGVsKDAsIGRwLT5yZWdzICsgQVBCX0NU UkwpOworCisJLyogY2hlY2sgdGhlIGtlZXAgYWxpdmUgcmVnaXN0ZXIgdG8gbWFrZSBzdXJlIGZ3 IHdvcmtpbmcgKi8KKwlyZXQgPSByZWFkeF9wb2xsX3RpbWVvdXQocmVhZGwsIGRwLT5yZWdzICsg S0VFUF9BTElWRSwKKwkJCQkgcmVnLCByZWcsIDIwMDAsIEZXX0FMSVZFX1RJTUVPVVRfVVMpOwor CWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHAtPmRldiwgImZhaWxlZCB0byBsb2FkZWQgdGhl IEZXIHJlZyA9ICV4XG4iLCByZWcpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZWcgPSBy ZWFkbChkcC0+cmVncyArIFZFUl9MKSAmIDB4ZmY7CisJZHAtPmZ3X3ZlcnNpb24gPSByZWc7CisJ cmVnID0gcmVhZGwoZHAtPnJlZ3MgKyBWRVJfSCkgJiAweGZmOworCWRwLT5md192ZXJzaW9uIHw9 IHJlZyA8PCA4OworCXJlZyA9IHJlYWRsKGRwLT5yZWdzICsgVkVSX0xJQl9MX0FERFIpICYgMHhm ZjsKKwlkcC0+ZndfdmVyc2lvbiB8PSByZWcgPDwgMTY7CisJcmVnID0gcmVhZGwoZHAtPnJlZ3Mg KyBWRVJfTElCX0hfQUREUikgJiAweGZmOworCWRwLT5md192ZXJzaW9uIHw9IHJlZyA8PCAyNDsK KworCWRldl9kYmcoZHAtPmRldiwgImZpcm13YXJlIHZlcnNpb246ICV4XG4iLCBkcC0+ZndfdmVy c2lvbik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNkbl9kcF9zZXRfZmlybXdhcmVfYWN0aXZl KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgYm9vbCBlbmFibGUpCit7CisJdTggbXNnWzVdOwor CWludCByZXQsIGk7CisKKwltc2dbMF0gPSBHRU5FUkFMX01BSU5fQ09OVFJPTDsKKwltc2dbMV0g PSBNQl9NT0RVTEVfSURfR0VORVJBTDsKKwltc2dbMl0gPSAwOworCW1zZ1szXSA9IDE7CisJbXNn WzRdID0gZW5hYmxlID8gRldfQUNUSVZFIDogRldfU1RBTkRCWTsKKworCWZvciAoaSA9IDA7IGkg PCBzaXplb2YobXNnKTsgaSsrKSB7CisJCXJldCA9IGNkcF9kcF9tYWlsYm94X3dyaXRlKGRwLCBt c2dbaV0sIDEpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfc2V0X2Zpcm13YXJlX2FjdGl2ZTsK Kwl9CisKKwkvKiByZWFkIHRoZSBmaXJtd2FyZSBzdGF0ZSAqLworCWZvciAoaSA9IDA7IGkgPCBz aXplb2YobXNnKTsgaSsrKSAgeworCQlyZXQgPSBjZG5fZHBfbWFpbGJveF9yZWFkKGRwLCAxKTsK KwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycl9zZXRfZmlybXdhcmVfYWN0aXZlOworCisJCW1z Z1tpXSA9IHJldDsKKwl9CisKKwlkcC0+ZndfYWN0aXZlZCA9IChtc2dbNF0gPT0gRldfQUNUSVZF KTsKKwlyZXQgPSAwOworCitlcnJfc2V0X2Zpcm13YXJlX2FjdGl2ZToKKwlpZiAocmV0IDwgMCkK KwkJZGV2X2VycihkcC0+ZGV2LCAic2V0IGZpcm13YXJlIGFjdGl2ZSBmYWlsZWRcbiIpOworCXJl dHVybiByZXQ7Cit9CisKK2ludCBjZG5fZHBfc2V0X2hvc3RfY2FwKHN0cnVjdCBjZG5fZHBfZGV2 aWNlICpkcCwgdTggbGFuZXMsIGJvb2wgZmxpcCkKK3sKKwl1OCBtc2dbOF07CisJaW50IHJldDsK KworCW1zZ1swXSA9IENETl9EUF9NQVhfTElOS19SQVRFOworCW1zZ1sxXSA9IGxhbmVzOworCW1z Z1syXSA9IFZPTFRBR0VfTEVWRUxfMjsKKwltc2dbM10gPSBQUkVfRU1QSEFTSVNfTEVWRUxfMzsK Kwltc2dbNF0gPSBQVFMxIHwgUFRTMiB8IFBUUzMgfCBQVFM0OworCW1zZ1s1XSA9IEZBU1RfTFRf Tk9UX1NVUFBPUlQ7CisJbXNnWzZdID0gZmxpcCA/IExBTkVfTUFQUElOR19GTElQUEVEIDogTEFO RV9NQVBQSU5HX05PUk1BTDsKKwltc2dbN10gPSBFTkhBTkNFRDsKKworCXJldCA9IGNkbl9kcF9t YWlsYm94X3NlbmQoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwKKwkJCQkgIERQVFhfU0VUX0hPU1Rf Q0FQQUJJTElUSUVTLAorCQkJCSAgc2l6ZW9mKG1zZyksIG1zZyk7CisJaWYgKHJldCkKKwkJZ290 byBlcnJfc2V0X2hvc3RfY2FwOworCisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgRFBfQVVY X1NXQVBfSU5WRVJTSU9OX0NPTlRST0wsCisJCQkgICAgICAgQVVYX0hPU1RfSU5WRVJUKTsKKwor ZXJyX3NldF9ob3N0X2NhcDoKKwlpZiAocmV0KQorCQlkZXZfZXJyKGRwLT5kZXYsICJzZXQgaG9z dCBjYXAgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgY2RuX2Rw X2V2ZW50X2NvbmZpZyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJdTggbXNnWzVdOwor CWludCByZXQ7CisKKwltZW1zZXQobXNnLCAwLCBzaXplb2YobXNnKSk7CisKKwltc2dbMF0gPSBE UFRYX0VWRU5UX0VOQUJMRV9IUEQgfCBEUFRYX0VWRU5UX0VOQUJMRV9UUkFJTklORzsKKworCXJl dCA9IGNkbl9kcF9tYWlsYm94X3NlbmQoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwgRFBUWF9FTkFC TEVfRVZFTlQsCisJCQkJICBzaXplb2YobXNnKSwgbXNnKTsKKwlpZiAocmV0KQorCQlkZXZfZXJy KGRwLT5kZXYsICJzZXQgZXZlbnQgY29uZmlnIGZhaWxlZDogJWRcbiIsIHJldCk7CisKKwlyZXR1 cm4gcmV0OworfQorCit1MzIgY2RuX2RwX2dldF9ldmVudChzdHJ1Y3QgY2RuX2RwX2RldmljZSAq ZHApCit7CisJcmV0dXJuIHJlYWRsKGRwLT5yZWdzICsgU1dfRVZFTlRTMCk7Cit9CisKK2ludCBj ZG5fZHBfZ2V0X2hwZF9zdGF0dXMoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCXU4IHN0 YXR1czsKKwlpbnQgcmV0OworCisJcmV0ID0gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9E VUxFX0lEX0RQX1RYLCBEUFRYX0hQRF9TVEFURSwKKwkJCQkgIDAsIE5VTEwpOworCWlmIChyZXQp CisJCWdvdG8gZXJyX2dldF9ocGQ7CisKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF92YWxpZGF0ZV9y ZWNlaXZlKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsCisJCQkJCSAgICAgIERQVFhfSFBEX1NUQVRF LCBzaXplb2Yoc3RhdHVzKSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZ2V0X2hwZDsKKworCXJl dCA9IGNkbl9kcF9tYWlsYm94X3JlYWRfcmVjZWl2ZShkcCwgJnN0YXR1cywgc2l6ZW9mKHN0YXR1 cykpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2dldF9ocGQ7CisKKwlyZXR1cm4gc3RhdHVzOwor CitlcnJfZ2V0X2hwZDoKKwlkZXZfZXJyKGRwLT5kZXYsICJnZXQgaHBkIHN0YXR1cyBmYWlsZWQ6 ICVkXG4iLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBjZG5fZHBfZ2V0X2VkaWRfYmxv Y2sodm9pZCAqZGF0YSwgdTggKmVkaWQsCisJCQkgIHVuc2lnbmVkIGludCBibG9jaywgc2l6ZV90 IGxlbmd0aCkKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBkYXRhOworCXU4IG1zZ1sy XSwgcmVnWzJdOworCWludCByZXQ7CisKKwltc2dbMF0gPSBibG9jayAvIDI7CisJbXNnWzFdID0g YmxvY2sgJSAyOworCisJcmV0ID0gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lE X0RQX1RYLCBEUFRYX0dFVF9FRElELAorCQkJCSAgc2l6ZW9mKG1zZyksIG1zZyk7CisJaWYgKHJl dCkKKwkJZ290byBlcnJfZ2V0X2VkaWQ7CisKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF92YWxpZGF0 ZV9yZWNlaXZlKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsCisJCQkJCSAgICAgIERQVFhfR0VUX0VE SUQsCisJCQkJCSAgICAgIHNpemVvZihyZWcpICsgbGVuZ3RoKTsKKwlpZiAocmV0KQorCQlnb3Rv IGVycl9nZXRfZWRpZDsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3JlYWRfcmVjZWl2ZShkcCwg cmVnLCBzaXplb2YocmVnKSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZ2V0X2VkaWQ7CisKKwly ZXQgPSBjZG5fZHBfbWFpbGJveF9yZWFkX3JlY2VpdmUoZHAsIGVkaWQsIGxlbmd0aCk7CisJaWYg KHJldCkKKwkJZ290byBlcnJfZ2V0X2VkaWQ7CisKKwlpZiAocmVnWzBdICE9IGxlbmd0aCB8fCBy ZWdbMV0gIT0gYmxvY2sgLyAyKQorCQlyZXQgPSAtRUlOVkFMOworCitlcnJfZ2V0X2VkaWQ6CisJ aWYgKHJldCkKKwkJZGV2X2VycihkcC0+ZGV2LCAiZ2V0IGJsb2NrWyVkXSBlZGlkIGZhaWxlZDog JWRcbiIsIGJsb2NrLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBjZG5fZHBfdHJhaW5p bmdfc3RhcnQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCXVuc2lnbmVkIGxvbmcgdGlt ZW91dDsKKwl1OCBtc2csIGV2ZW50WzJdOworCWludCByZXQ7CisKKwltc2cgPSBMSU5LX1RSQUlO SU5HX1JVTjsKKworCS8qIHN0YXJ0IHRyYWluaW5nICovCisJcmV0ID0gY2RuX2RwX21haWxib3hf c2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLCBEUFRYX1RSQUlOSU5HX0NPTlRST0wsCisJCQkJ ICBzaXplb2YobXNnKSwgJm1zZyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfdHJhaW5pbmdfc3Rh cnQ7CisKKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoTElOS19UUkFJTklO R19USU1FT1VUX01TKTsKKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsK KwkJbXNsZWVwKExJTktfVFJBSU5JTkdfUkVUUllfTVMpOworCQlyZXQgPSBjZG5fZHBfbWFpbGJv eF9zZW5kKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsCisJCQkJCSAgRFBUWF9SRUFEX0VWRU5ULCAw LCBOVUxMKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX3RyYWluaW5nX3N0YXJ0OworCisJCXJl dCA9IGNkbl9kcF9tYWlsYm94X3ZhbGlkYXRlX3JlY2VpdmUoZHAsIE1CX01PRFVMRV9JRF9EUF9U WCwKKwkJCQkJCSAgICAgIERQVFhfUkVBRF9FVkVOVCwKKwkJCQkJCSAgICAgIHNpemVvZihldmVu dCkpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfdHJhaW5pbmdfc3RhcnQ7CisKKwkJcmV0ID0g Y2RuX2RwX21haWxib3hfcmVhZF9yZWNlaXZlKGRwLCBldmVudCwgc2l6ZW9mKGV2ZW50KSk7CisJ CWlmIChyZXQpCisJCQlnb3RvIGVycl90cmFpbmluZ19zdGFydDsKKworCQlpZiAoZXZlbnRbMV0g JiBFUV9QSEFTRV9GSU5JU0hFRCkKKwkJCXJldHVybiAwOworCX0KKworCXJldCA9IC1FVElNRURP VVQ7CisKK2Vycl90cmFpbmluZ19zdGFydDoKKwlkZXZfZXJyKGRwLT5kZXYsICJ0cmFpbmluZyBm YWlsZWQ6ICVkXG4iLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBjZG5fZHBfZ2V0X3Ry YWluaW5nX3N0YXR1cyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJdTggc3RhdHVzWzEw XTsKKwlpbnQgcmV0OworCisJcmV0ID0gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxF X0lEX0RQX1RYLCBEUFRYX1JFQURfTElOS19TVEFULAorCQkJCSAgMCwgTlVMTCk7CisJaWYgKHJl dCkKKwkJZ290byBlcnJfZ2V0X3RyYWluaW5nX3N0YXR1czsKKworCXJldCA9IGNkbl9kcF9tYWls Ym94X3ZhbGlkYXRlX3JlY2VpdmUoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwKKwkJCQkJICAgICAg RFBUWF9SRUFEX0xJTktfU1RBVCwKKwkJCQkJICAgICAgc2l6ZW9mKHN0YXR1cykpOworCWlmIChy ZXQpCisJCWdvdG8gZXJyX2dldF90cmFpbmluZ19zdGF0dXM7CisKKwlyZXQgPSBjZG5fZHBfbWFp bGJveF9yZWFkX3JlY2VpdmUoZHAsIHN0YXR1cywgc2l6ZW9mKHN0YXR1cykpOworCWlmIChyZXQp CisJCWdvdG8gZXJyX2dldF90cmFpbmluZ19zdGF0dXM7CisKKwlkcC0+bGluay5yYXRlID0gc3Rh dHVzWzBdOworCWRwLT5saW5rLm51bV9sYW5lcyA9IHN0YXR1c1sxXTsKKworZXJyX2dldF90cmFp bmluZ19zdGF0dXM6CisJaWYgKHJldCkKKwkJZGV2X2VycihkcC0+ZGV2LCAiZ2V0IHRyYWluaW5n IHN0YXR1cyBmYWlsZWQ6ICVkXG4iLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBjZG5f ZHBfc2V0X3ZpZGVvX3N0YXR1cyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIGludCBhY3RpdmUp Cit7CisJdTggbXNnOworCWludCByZXQ7CisKKwltc2cgPSAhIWFjdGl2ZTsKKworCXJldCA9IGNk bl9kcF9tYWlsYm94X3NlbmQoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwgRFBUWF9TRVRfVklERU8s CisJCQkJICBzaXplb2YobXNnKSwgJm1zZyk7CisJaWYgKHJldCkKKwkJZGV2X2VycihkcC0+ZGV2 LCAic2V0IHZpZGVvIHN0YXR1cyBmYWlsZWQ6ICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsK K30KKworc3RhdGljIGludCBjZG5fZHBfZ2V0X21zYV9taXNjKHN0cnVjdCB2aWRlb19pbmZvICp2 aWRlbywKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwl1MzIg bXNhX21pc2M7CisJdTggdmFsWzJdOworCisJc3dpdGNoICh2aWRlby0+Y29sb3JfZm10KSB7CisJ Y2FzZSBQWExfUkdCOgorCWNhc2UgWV9PTkxZOgorCQl2YWxbMF0gPSAwOworCQlicmVhazsKKwkv KiBzZXQgWVVWIGRlZmF1bHQgY29sb3Igc3BhY2UgY29udmVyc2lvbiB0byBCVDYwMSAqLworCWNh c2UgWUNCQ1JfNF80XzQ6CisJCXZhbFswXSA9IDYgKyBCVF82MDEgKiA4OworCQlicmVhazsKKwlj YXNlIFlDQkNSXzRfMl8yOgorCQl2YWxbMF0gPSA1ICsgQlRfNjAxICogODsKKwkJYnJlYWs7CisJ Y2FzZSBZQ0JDUl80XzJfMDoKKwkJdmFsWzBdID0gNTsKKwkJYnJlYWs7CisJfTsKKworCXN3aXRj aCAodmlkZW8tPmNvbG9yX2RlcHRoKSB7CisJY2FzZSA2OgorCQl2YWxbMV0gPSAwOworCQlicmVh azsKKwljYXNlIDg6CisJCXZhbFsxXSA9IDE7CisJCWJyZWFrOworCWNhc2UgMTA6CisJCXZhbFsx XSA9IDI7CisJCWJyZWFrOworCWNhc2UgMTI6CisJCXZhbFsxXSA9IDM7CisJCWJyZWFrOworCWNh c2UgMTY6CisJCXZhbFsxXSA9IDQ7CisJCWJyZWFrOworCX07CisKKwltc2FfbWlzYyA9IDIgKiB2 YWxbMF0gKyAzMiAqIHZhbFsxXSArCisJCSAgICgodmlkZW8tPmNvbG9yX2ZtdCA9PSBZX09OTFkp ID8gKDEgPDwgMTQpIDogMCk7CisKKwlyZXR1cm4gbXNhX21pc2M7Cit9CisKK2ludCBjZG5fZHBf Y29uZmlnX3ZpZGVvKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCkKK3sKKwlzdHJ1Y3QgdmlkZW9f aW5mbyAqdmlkZW8gPSAmZHAtPnZpZGVvX2luZm87CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGUgPSAmZHAtPm1vZGU7CisJdTY0IHN5bWJvbCwgdG1wOworCXUzMiB2YWwsIGxpbmtfcmF0 ZTsKKwl1OCBiaXRfcGVyX3BpeCwgdHVfc2l6ZV9yZWcgPSBUVV9TSVpFOworCWludCByZXQ7CisK KwliaXRfcGVyX3BpeCA9ICh2aWRlby0+Y29sb3JfZm10ID09IFlDQkNSXzRfMl8yKSA/CisJCSAg ICAgICh2aWRlby0+Y29sb3JfZGVwdGggKiAyKSA6ICh2aWRlby0+Y29sb3JfZGVwdGggKiAzKTsK KworCWxpbmtfcmF0ZSA9IGRybV9kcF9id19jb2RlX3RvX2xpbmtfcmF0ZShkcC0+bGluay5yYXRl KSAvIDEwMDA7CisKKwl2YWwgPSBWSUZfQllQQVNTX0lOVEVSTEFDRTsKKwlyZXQgPSBjZG5fZHBf cmVnX3dyaXRlKGRwLCBCTkRfSFNZTkMyVlNZTkMsIHZhbCk7CisJaWYgKHJldCkKKwkJZ290byBl cnJfY29uZmlnX3ZpZGVvOworCisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgSFNZTkMyVlNZ TkNfUE9MX0NUUkwsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NvbmZpZ192aWRlbzsKKwor CS8qCisJICogZ2V0IGEgYmVzdCB0dV9zaXplIGFuZCB2YWxpZCBzeW1ib2w6CisJICogMS4gY2hv c2UgTGNsayBmcmVxKDE2Mk1oeiwgMjcwTWh6LCA1NDBNaHopLCBzZXQgVFUgdG8gMzIKKwkgKiAy LiBjYWxjdWxhdGUgVlModmFsaWQgc3ltYm9sKSA9IFRVICogUGNsayAqIEJwcCAvIChMY2xrICog TGFuZXMpCisJICogMy4gaWYgVlMgPiAqLjg1IG9yIFZTIDwgKi4xIG9yIFZTIDwgMiBvciBUVSA8 IFZTICsgNCwgdGhlbiBzZXQKKwkgKiAgICBUVSArPSAyIGFuZCByZXBlYXQgMm5kIHN0ZXAuCisJ ICovCisJZG8geworCQl0dV9zaXplX3JlZyArPSAyOworCQl0bXAgPSB0dV9zaXplX3JlZyAqIG1v ZGUtPmNsb2NrICogYml0X3Blcl9waXg7CisJCXRtcCAvPSBkcC0+bGluay5udW1fbGFuZXMgKiBs aW5rX3JhdGUgKiA4OworCQlzeW1ib2wgPSB0bXAgLyAxMDAwOworCX0gd2hpbGUgKChzeW1ib2wg PD0gMSkgfHwgKHR1X3NpemVfcmVnIC0gc3ltYm9sIDwgNCkgfHwKKwkJICh0bXAgJSAxMDAwID4g ODUwKSB8fCAodG1wICUgMTAwMCA8IDEwMCkpOworCisJdmFsID0gc3ltYm9sICsgKHR1X3NpemVf cmVnIDw8IDgpOworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIERQX0ZSQU1FUl9UVSwgdmFs KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jb25maWdfdmlkZW87CisKKwkvKiBzZXQgdGhlIEZJ Rk8gQnVmZmVyIHNpemUgKi8KKwl2YWwgPSAoKG1vZGUtPmNsb2NrICogKHN5bWJvbCArIDEpIC8g MTAwMCkgKyBsaW5rX3JhdGUpOworCXZhbCAvPSAoZHAtPmxpbmsubnVtX2xhbmVzICogbGlua19y YXRlKTsKKwl2YWwgPSA4ICogKHN5bWJvbCArIDEpIC8gYml0X3Blcl9waXggLSB2YWw7CisJdmFs ICs9IDI7CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgRFBfVkNfVEFCTEUoMTUpLCB2YWwp OworCisJc3dpdGNoICh2aWRlby0+Y29sb3JfZGVwdGgpIHsKKwljYXNlIDY6CisJCXZhbCA9IEJD U182OworCQlicmVhazsKKwljYXNlIDg6CisJCXZhbCA9IEJDU184OworCQlicmVhazsKKwljYXNl IDEwOgorCQl2YWwgPSBCQ1NfMTA7CisJCWJyZWFrOworCWNhc2UgMTI6CisJCXZhbCA9IEJDU18x MjsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJdmFsID0gQkNTXzE2OworCQlicmVhazsKKwl9Owor CisJdmFsICs9IHZpZGVvLT5jb2xvcl9mbXQgPDwgODsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRl KGRwLCBEUF9GUkFNRVJfUFhMX1JFUFIsIHZhbCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY29u ZmlnX3ZpZGVvOworCisJdmFsID0gdmlkZW8tPmhfc3luY19wb2xhcml0eSA/IERQX0ZSQU1FUl9T UF9IU1AgOiAwOworCXZhbCB8PSB2aWRlby0+dl9zeW5jX3BvbGFyaXR5ID8gRFBfRlJBTUVSX1NQ X1ZTUCA6IDA7CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgRFBfRlJBTUVSX1NQLCB2YWwp OworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NvbmZpZ192aWRlbzsKKworCXZhbCA9IChtb2RlLT5o c3luY19zdGFydCAtIG1vZGUtPmhkaXNwbGF5KSA8PCAxNjsKKwl2YWwgfD0gbW9kZS0+aHRvdGFs IC0gbW9kZS0+aHN5bmNfZW5kOworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIERQX0ZST05U X0JBQ0tfUE9SQ0gsIHZhbCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY29uZmlnX3ZpZGVvOwor CisJdmFsID0gbW9kZS0+aGRpc3BsYXkgKiBiaXRfcGVyX3BpeCAvIDg7CisJcmV0ID0gY2RuX2Rw X3JlZ193cml0ZShkcCwgRFBfQllURV9DT1VOVCwgdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVy cl9jb25maWdfdmlkZW87CisKKwl2YWwgPSBtb2RlLT5odG90YWwgfCAoKG1vZGUtPmh0b3RhbCAt IG1vZGUtPmhzeW5jX3N0YXJ0KSA8PCAxNik7CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwg TVNBX0hPUklaT05UQUxfMCwgdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jb25maWdfdmlk ZW87CisKKwl2YWwgPSBtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFydDsKKwl2YWwg fD0gKG1vZGUtPmhkaXNwbGF5IDw8IDE2KSB8ICh2aWRlby0+aF9zeW5jX3BvbGFyaXR5IDw8IDE1 KTsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBNU0FfSE9SSVpPTlRBTF8xLCB2YWwpOwor CWlmIChyZXQpCisJCWdvdG8gZXJyX2NvbmZpZ192aWRlbzsKKworCXZhbCA9IG1vZGUtPnZ0b3Rh bDsKKwl2YWwgfD0gKChtb2RlLT52dG90YWwgLSBtb2RlLT52c3luY19zdGFydCkgPDwgMTYpOwor CXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIE1TQV9WRVJUSUNBTF8wLCB2YWwpOworCWlmIChy ZXQpCisJCWdvdG8gZXJyX2NvbmZpZ192aWRlbzsKKworCXZhbCA9IG1vZGUtPnZzeW5jX2VuZCAt IG1vZGUtPnZzeW5jX3N0YXJ0OworCXZhbCB8PSBtb2RlLT52ZGlzcGxheSA8PCAxNiB8ICh2aWRl by0+dl9zeW5jX3BvbGFyaXR5IDw8IDE1KTsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBN U0FfVkVSVElDQUxfMSwgdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jb25maWdfdmlkZW87 CisKKwl2YWwgPSBjZG5fZHBfZ2V0X21zYV9taXNjKHZpZGVvLCBtb2RlKTsKKwlyZXQgPSBjZG5f ZHBfcmVnX3dyaXRlKGRwLCBNU0FfTUlTQywgdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9j b25maWdfdmlkZW87CisKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBTVFJFQU1fQ09ORklH LCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jb25maWdfdmlkZW87CisKKwl2YWwgPSBtb2Rl LT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFydDsKKwl2YWwgfD0gKG1vZGUtPmhkaXNwbGF5 IDw8IDE2KTsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBEUF9IT1JJWk9OVEFMLCB2YWwp OworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NvbmZpZ192aWRlbzsKKworCXZhbCA9IG1vZGUtPnZ0 b3RhbDsKKwl2YWwgLT0gKG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZkaXNwbGF5KTsKKwl2YWwgfD0g KG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZzeW5jX3N0YXJ0KSA8PCAxNjsKKwlyZXQgPSBjZG5fZHBf cmVnX3dyaXRlKGRwLCBEUF9WRVJUSUNBTF8wLCB2YWwpOworCWlmIChyZXQpCisJCWdvdG8gZXJy X2NvbmZpZ192aWRlbzsKKworCXZhbCA9IG1vZGUtPnZ0b3RhbDsKKwlyZXQgPSBjZG5fZHBfcmVn X3dyaXRlKGRwLCBEUF9WRVJUSUNBTF8xLCB2YWwpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2Nv bmZpZ192aWRlbzsKKworCXZhbCA9ICAwOworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGVfYml0KGRw LCBEUF9WQl9JRCwgMiwgMSwgdmFsKTsKKworZXJyX2NvbmZpZ192aWRlbzoKKwlpZiAocmV0KQor CQlkZXZfZXJyKGRwLT5kZXYsICJjb25maWcgdmlkZW8gZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwly ZXR1cm4gcmV0OworfQorCitpbnQgY2RuX2RwX2F1ZGlvX3N0b3Aoc3RydWN0IGNkbl9kcF9kZXZp Y2UgKmRwLCBzdHJ1Y3QgYXVkaW9faW5mbyAqYXVkaW8pCit7CisJdTMyIHZhbDsKKwlpbnQgcmV0 OworCisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgQVVESU9fUEFDS19DT05UUk9MLCAwKTsK KwlpZiAocmV0KSB7CisJCWRldl9lcnIoZHAtPmRldiwgImF1ZGlvIHN0b3AgZmFpbGVkOiAlZFxu IiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl2YWwgPSBTUERJRl9BVkdfU0VMIHwgU1BE SUZfSklUVEVSX0JZUEFTUzsKKwl2YWwgfD0gU1BESUZfRklGT19NSURfUkFOR0UoMHhlMCk7CisJ dmFsIHw9IFNQRElGX0pJVFRFUl9USFJTSCgweGUwKTsKKwl2YWwgfD0gU1BESUZfSklUVEVSX0FW R19XSU4oNyk7CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBTUERJRl9DVFJMX0FERFIpOworCisJ LyogY2xlYXJuIHRoZSBhdWRpbyBjb25maWcgYW5kIHJlc2V0ICovCisJd3JpdGVsKDAsIGRwLT5y ZWdzICsgQVVESU9fU1JDX0NOVEwpOworCXdyaXRlbCgwLCBkcC0+cmVncyArIEFVRElPX1NSQ19D TkZHKTsKKwl3cml0ZWwoQVVESU9fU1dfUlNULCBkcC0+cmVncyArIEFVRElPX1NSQ19DTlRMKTsK Kwl3cml0ZWwoMCwgZHAtPnJlZ3MgKyBBVURJT19TUkNfQ05UTCk7CisKKwkvKiByZXNldCBzbXBs MnBja3QgY29tcG9uZW50ICAqLworCXdyaXRlbCgwLCBkcC0+cmVncyArIFNNUEwyUEtUX0NOVEwp OworCXdyaXRlbChBVURJT19TV19SU1QsIGRwLT5yZWdzICsgU01QTDJQS1RfQ05UTCk7CisJd3Jp dGVsKDAsIGRwLT5yZWdzICsgU01QTDJQS1RfQ05UTCk7CisKKwkvKiByZXNldCBGSUZPICovCisJ d3JpdGVsKEFVRElPX1NXX1JTVCwgZHAtPnJlZ3MgKyBGSUZPX0NOVEwpOworCXdyaXRlbCgwLCBk cC0+cmVncyArIEZJRk9fQ05UTCk7CisKKwlpZiAoYXVkaW8tPmZvcm1hdCA9PSBBRk1UX1NQRElG KQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUoZHAtPnNwZGlmX2Nsayk7CisKKwlyZXR1cm4gMDsK K30KKworaW50IGNkbl9kcF9hdWRpb19tdXRlKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgYm9v bCBlbmFibGUpCit7CisJaW50IHJldDsKKworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGVfYml0KGRw LCBEUF9WQl9JRCwgNCwgMSwgZW5hYmxlKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKGRwLT5kZXYs ICJhdWRpbyBtdXRlIGZhaWxlZDogJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgdm9pZCBjZG5fZHBfYXVkaW9fY29uZmlnX2kycyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAq ZHAsCisJCQkJICAgIHN0cnVjdCBhdWRpb19pbmZvICphdWRpbykKK3sKKwlpbnQgc3ViX3Bja3Rf bnVtID0gMSwgaTJzX3BvcnRfZW5fdmFsID0gMHhmLCBpOworCXUzMiB2YWw7CisKKwlpZiAoYXVk aW8tPmNoYW5uZWxzID09IDIpIHsKKwkJaWYgKGRwLT5saW5rLm51bV9sYW5lcyA9PSAxKQorCQkJ c3ViX3Bja3RfbnVtID0gMjsKKwkJZWxzZQorCQkJc3ViX3Bja3RfbnVtID0gNDsKKworCQlpMnNf cG9ydF9lbl92YWwgPSAxOworCX0gZWxzZSBpZiAoYXVkaW8tPmNoYW5uZWxzID09IDQpIHsKKwkJ aTJzX3BvcnRfZW5fdmFsID0gMzsKKwl9CisKKwl3cml0ZWwoMHgwLCBkcC0+cmVncyArIFNQRElG X0NUUkxfQUREUik7CisKKwl3cml0ZWwoU1lOQ19XUl9UT19DSF9aRVJPLCBkcC0+cmVncyArIEZJ Rk9fQ05UTCk7CisKKwl2YWwgPSBNQVhfTlVNX0NIKGF1ZGlvLT5jaGFubmVscyk7CisJdmFsIHw9 IE5VTV9PRl9JMlNfUE9SVFMoYXVkaW8tPmNoYW5uZWxzKTsKKwl2YWwgfD0gQVVESU9fVFlQRV9M UENNOworCXZhbCB8PSBDRkdfU1VCX1BDS1RfTlVNKHN1Yl9wY2t0X251bSk7CisJd3JpdGVsKHZh bCwgZHAtPnJlZ3MgKyBTTVBMMlBLVF9DTkZHKTsKKworCWlmIChhdWRpby0+c2FtcGxlX3dpZHRo ID09IDE2KQorCQl2YWwgPSAwOworCWVsc2UgaWYgKGF1ZGlvLT5zYW1wbGVfd2lkdGggPT0gMjQp CisJCXZhbCA9IDEgPDwgOTsKKwllbHNlCisJCXZhbCA9IDIgPDwgOTsKKworCXZhbCB8PSBBVURJ T19DSF9OVU0oYXVkaW8tPmNoYW5uZWxzKTsKKwl2YWwgfD0gSTJTX0RFQ19QT1JUX0VOKGkyc19w b3J0X2VuX3ZhbCk7CisJdmFsIHw9IFRSQU5TX1NNUExfV0lEVEhfMzI7CisJd3JpdGVsKHZhbCwg ZHAtPnJlZ3MgKyBBVURJT19TUkNfQ05GRyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgKGF1ZGlvLT5j aGFubmVscyArIDEpIC8gMjsgaSsrKSB7CisJCWlmIChhdWRpby0+c2FtcGxlX3dpZHRoID09IDE2 KQorCQkJdmFsID0gKDB4MDggPDwgOCkgfCAoMHgwOCA8PCAyMCk7CisJCWVsc2UgaWYgKGF1ZGlv LT5zYW1wbGVfd2lkdGggPT0gMjQpCisJCQl2YWwgPSAoMHgwYiA8PCA4KSB8ICgweDBiIDw8IDIw KTsKKworCQl2YWwgfD0gKCgyICogaSkgPDwgNCkgfCAoKDIgKiBpICsgMSkgPDwgMTYpOworCQl3 cml0ZWwodmFsLCBkcC0+cmVncyArIFNUVFNfQklUX0NIKGkpKTsKKwl9CisKKwlzd2l0Y2ggKGF1 ZGlvLT5zYW1wbGVfcmF0ZSkgeworCWNhc2UgMzIwMDA6CisJCXZhbCA9IFNBTVBMSU5HX0ZSRVEo MykgfAorCQkgICAgICBPUklHSU5BTF9TQU1QX0ZSRVEoMHhjKTsKKwkJYnJlYWs7CisJY2FzZSA0 NDEwMDoKKwkJdmFsID0gU0FNUExJTkdfRlJFUSgwKSB8CisJCSAgICAgIE9SSUdJTkFMX1NBTVBf RlJFUSgweGYpOworCQlicmVhazsKKwljYXNlIDQ4MDAwOgorCQl2YWwgPSBTQU1QTElOR19GUkVR KDIpIHwKKwkJICAgICAgT1JJR0lOQUxfU0FNUF9GUkVRKDB4ZCk7CisJCWJyZWFrOworCWNhc2Ug ODgyMDA6CisJCXZhbCA9IFNBTVBMSU5HX0ZSRVEoOCkgfAorCQkgICAgICBPUklHSU5BTF9TQU1Q X0ZSRVEoMHg3KTsKKwkJYnJlYWs7CisJY2FzZSA5NjAwMDoKKwkJdmFsID0gU0FNUExJTkdfRlJF USgweGEpIHwKKwkJICAgICAgT1JJR0lOQUxfU0FNUF9GUkVRKDUpOworCQlicmVhazsKKwljYXNl IDE3NjQwMDoKKwkJdmFsID0gU0FNUExJTkdfRlJFUSgweGMpIHwKKwkJICAgICAgT1JJR0lOQUxf U0FNUF9GUkVRKDMpOworCQlicmVhazsKKwljYXNlIDE5MjAwMDoKKwkJdmFsID0gU0FNUExJTkdf RlJFUSgweGUpIHwKKwkJICAgICAgT1JJR0lOQUxfU0FNUF9GUkVRKDEpOworCQlicmVhazsKKwl9 CisJdmFsIHw9IDQ7CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBDT01fQ0hfU1RUU19CSVRTKTsK KworCXdyaXRlbChTTVBMMlBLVF9FTiwgZHAtPnJlZ3MgKyBTTVBMMlBLVF9DTlRMKTsKKwl3cml0 ZWwoSTJTX0RFQ19TVEFSVCwgZHAtPnJlZ3MgKyBBVURJT19TUkNfQ05UTCk7Cit9CisKK3N0YXRp YyB2b2lkIGNkbl9kcF9hdWRpb19jb25maWdfc3BkaWYoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw KQoreworCXUzMiB2YWw7CisKKwl2YWwgPSBTUERJRl9BVkdfU0VMIHwgU1BESUZfSklUVEVSX0JZ UEFTUzsKKwl2YWwgfD0gU1BESUZfRklGT19NSURfUkFOR0UoMHhlMCk7CisJdmFsIHw9IFNQRElG X0pJVFRFUl9USFJTSCgweGUwKTsKKwl2YWwgfD0gU1BESUZfSklUVEVSX0FWR19XSU4oNyk7CisJ d3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBTUERJRl9DVFJMX0FERFIpOworCisJd3JpdGVsKFNZTkNf V1JfVE9fQ0hfWkVSTywgZHAtPnJlZ3MgKyBGSUZPX0NOVEwpOworCisJdmFsID0gTUFYX05VTV9D SCgyKSB8IEFVRElPX1RZUEVfTFBDTSB8IENGR19TVUJfUENLVF9OVU0oNCk7CisJd3JpdGVsKHZh bCwgZHAtPnJlZ3MgKyBTTVBMMlBLVF9DTkZHKTsKKwl3cml0ZWwoU01QTDJQS1RfRU4sIGRwLT5y ZWdzICsgU01QTDJQS1RfQ05UTCk7CisKKwl2YWwgPSBTUERJRl9FTkFCTEUgfCBTUERJRl9BVkdf U0VMIHwgU1BESUZfSklUVEVSX0JZUEFTUzsKKwl2YWwgfD0gU1BESUZfRklGT19NSURfUkFOR0Uo MHhlMCk7CisJdmFsIHw9IFNQRElGX0pJVFRFUl9USFJTSCgweGUwKTsKKwl2YWwgfD0gU1BESUZf SklUVEVSX0FWR19XSU4oNyk7CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBTUERJRl9DVFJMX0FE RFIpOworCisJY2xrX3ByZXBhcmVfZW5hYmxlKGRwLT5zcGRpZl9jbGspOworCWNsa19zZXRfcmF0 ZShkcC0+c3BkaWZfY2xrLCBDRE5fRFBfU1BESUZfQ0xLKTsKK30KKworaW50IGNkbl9kcF9hdWRp b19jb25maWcoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCBzdHJ1Y3QgYXVkaW9faW5mbyAqYXVk aW8pCit7CisJaW50IHJldDsKKworCS8qIHJlc2V0IHRoZSBzcGRpZiBjbGsgYmVmb3JlIGNvbmZp ZyAqLworCWlmIChhdWRpby0+Zm9ybWF0ID09IEFGTVRfU1BESUYpIHsKKwkJcmVzZXRfY29udHJv bF9hc3NlcnQoZHAtPnNwZGlmX3JzdCk7CisJCXJlc2V0X2NvbnRyb2xfZGVhc3NlcnQoZHAtPnNw ZGlmX3JzdCk7CisJfQorCisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgQ01fTEFORV9DVFJM LCBMQU5FX1JFRl9DWUMpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2F1ZGlvX2NvbmZpZzsKKwor CXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIENNX0NUUkwsIDApOworCWlmIChyZXQpCisJCWdv dG8gZXJyX2F1ZGlvX2NvbmZpZzsKKworCWlmIChhdWRpby0+Zm9ybWF0ID09IEFGTVRfSTJTKQor CQljZG5fZHBfYXVkaW9fY29uZmlnX2kycyhkcCwgYXVkaW8pOworCWVsc2UKKwkJY2RuX2RwX2F1 ZGlvX2NvbmZpZ19zcGRpZihkcCk7CisKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBBVURJ T19QQUNLX0NPTlRST0wsIEFVRElPX1BBQ0tfRU4pOworCitlcnJfYXVkaW9fY29uZmlnOgorCWlm IChyZXQpCisJCWRldl9lcnIoZHAtPmRldiwgImF1ZGlvIGNvbmZpZyBmYWlsZWQ6ICVkXG4iLCBy ZXQpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2No aXAvY2RuLWRwLXJlZy5oIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1yZWcuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWMzNjc0Ci0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1yZWcuaApAQCAtMCwwICsxLDQ4 MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgRnV6aG91IFJvY2tjaGlwIEVsZWN0cm9uaWNzIENv Lkx0ZAorICogQXV0aG9yOiBDaHJpcyBaaG9uZyA8enl3QHJvY2stY2hpcHMuY29tPgorICoKKyAq IFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRl ZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisgKi8KKworI2lmbmRlZiBfQ0ROX0RQX1JFR19ICisjZGVmaW5lIF9DRE5fRFBfUkVHX0gK KworI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCisjZGVmaW5lIEFERFJfSU1FTQkJMHgxMDAw MAorI2RlZmluZSBBRERSX0RNRU0JCTB4MjAwMDAKKworLyogQVBCIENGRyBhZGRyICovCisjZGVm aW5lIEFQQl9DVFJMCQkJMAorI2RlZmluZSBYVF9JTlRfQ1RSTAkJCTB4MDQKKyNkZWZpbmUgTUFJ TEJPWF9GVUxMX0FERFIJCTB4MDgKKyNkZWZpbmUgTUFJTEJPWF9FTVBUWV9BRERSCQkweDBjCisj ZGVmaW5lIE1BSUxCT1gwX1dSX0RBVEEJCTB4MTAKKyNkZWZpbmUgTUFJTEJPWDBfUkRfREFUQQkJ MHgxNAorI2RlZmluZSBLRUVQX0FMSVZFCQkJMHgxOAorI2RlZmluZSBWRVJfTAkJCQkweDFjCisj ZGVmaW5lIFZFUl9ICQkJCTB4MjAKKyNkZWZpbmUgVkVSX0xJQl9MX0FERFIJCQkweDI0CisjZGVm aW5lIFZFUl9MSUJfSF9BRERSCQkJMHgyOAorI2RlZmluZSBTV19ERUJVR19MCQkJMHgyYworI2Rl ZmluZSBTV19ERUJVR19ICQkJMHgzMAorI2RlZmluZSBNQUlMQk9YX0lOVF9NQVNLCQkweDM0Cisj ZGVmaW5lIE1BSUxCT1hfSU5UX1NUQVRVUwkJMHgzOAorI2RlZmluZSBTV19DTEtfTAkJCTB4M2MK KyNkZWZpbmUgU1dfQ0xLX0gJCQkweDQwCisjZGVmaW5lIFNXX0VWRU5UUzAJCQkweDQ0CisjZGVm aW5lIFNXX0VWRU5UUzEJCQkweDQ4CisjZGVmaW5lIFNXX0VWRU5UUzIJCQkweDRjCisjZGVmaW5l IFNXX0VWRU5UUzMJCQkweDUwCisjZGVmaW5lIFhUX09DRF9DVFJMCQkJMHg2MAorI2RlZmluZSBB UEJfSU5UX01BU0sJCQkweDZjCisjZGVmaW5lIEFQQl9TVEFUVVNfTUFTSwkJCTB4NzAKKworLyog YXVkaW8gZGVjb2RlciBhZGRyICovCisjZGVmaW5lIEFVRElPX1NSQ19DTlRMCQkJMHgzMDAwMAor I2RlZmluZSBBVURJT19TUkNfQ05GRwkJCTB4MzAwMDQKKyNkZWZpbmUgQ09NX0NIX1NUVFNfQklU UwkJMHgzMDAwOAorI2RlZmluZSBTVFRTX0JJVF9DSCh4KQkJCSgweDMwMDBjICsgKCh4KSA8PCAy KSkKKyNkZWZpbmUgU1BESUZfQ1RSTF9BRERSCQkJMHgzMDA0YworI2RlZmluZSBTUERJRl9DSDFf Q1NfMzEwMF9BRERSCQkweDMwMDUwCisjZGVmaW5lIFNQRElGX0NIMV9DU182MzMyX0FERFIJCTB4 MzAwNTQKKyNkZWZpbmUgU1BESUZfQ0gxX0NTXzk1NjRfQUREUgkJMHgzMDA1OAorI2RlZmluZSBT UERJRl9DSDFfQ1NfMTI3OTZfQUREUgkJMHgzMDA1YworI2RlZmluZSBTUERJRl9DSDFfQ1NfMTU5 MTI4X0FERFIJMHgzMDA2MAorI2RlZmluZSBTUERJRl9DSDFfQ1NfMTkxMTYwX0FERFIJMHgzMDA2 NAorI2RlZmluZSBTUERJRl9DSDJfQ1NfMzEwMF9BRERSCQkweDMwMDY4CisjZGVmaW5lIFNQRElG X0NIMl9DU182MzMyX0FERFIJCTB4MzAwNmMKKyNkZWZpbmUgU1BESUZfQ0gyX0NTXzk1NjRfQURE UgkJMHgzMDA3MAorI2RlZmluZSBTUERJRl9DSDJfQ1NfMTI3OTZfQUREUgkJMHgzMDA3NAorI2Rl ZmluZSBTUERJRl9DSDJfQ1NfMTU5MTI4X0FERFIJMHgzMDA3OAorI2RlZmluZSBTUERJRl9DSDJf Q1NfMTkxMTYwX0FERFIJMHgzMDA3YworI2RlZmluZSBTTVBMMlBLVF9DTlRMCQkJMHgzMDA4MAor I2RlZmluZSBTTVBMMlBLVF9DTkZHCQkJMHgzMDA4NAorI2RlZmluZSBGSUZPX0NOVEwJCQkweDMw MDg4CisjZGVmaW5lIEZJRk9fU1RUUwkJCTB4MzAwOGMKKworLyogc291cmNlIHBpZiBhZGRyICov CisjZGVmaW5lIFNPVVJDRV9QSUZfV1JfQUREUgkJMHgzMDgwMAorI2RlZmluZSBTT1VSQ0VfUElG X1dSX1JFUQkJMHgzMDgwNAorI2RlZmluZSBTT1VSQ0VfUElGX1JEX0FERFIJCTB4MzA4MDgKKyNk ZWZpbmUgU09VUkNFX1BJRl9SRF9SRVEJCTB4MzA4MGMKKyNkZWZpbmUgU09VUkNFX1BJRl9EQVRB X1dSCQkweDMwODEwCisjZGVmaW5lIFNPVVJDRV9QSUZfREFUQV9SRAkJMHgzMDgxNAorI2RlZmlu ZSBTT1VSQ0VfUElGX0ZJRk8xX0ZMVVNICQkweDMwODE4CisjZGVmaW5lIFNPVVJDRV9QSUZfRklG TzJfRkxVU0gJCTB4MzA4MWMKKyNkZWZpbmUgU09VUkNFX1BJRl9TVEFUVVMJCTB4MzA4MjAKKyNk ZWZpbmUgU09VUkNFX1BJRl9JTlRFUlJVUFRfU09VUkNFCTB4MzA4MjQKKyNkZWZpbmUgU09VUkNF X1BJRl9JTlRFUlJVUFRfTUFTSwkweDMwODI4CisjZGVmaW5lIFNPVVJDRV9QSUZfUEtUX0FMTE9D X1JFRwkweDMwODJjCisjZGVmaW5lIFNPVVJDRV9QSUZfUEtUX0FMTE9DX1dSX0VOCTB4MzA4MzAK KyNkZWZpbmUgU09VUkNFX1BJRl9TV19SRVNFVAkJMHgzMDgzNAorCisvKiBiZWxsb3cgcmVnaXN0 ZXJzIG5lZWQgYWNjZXNzIGJ5IG1haWxib3ggKi8KKy8qIHNvdXJjZSBjYXIgYWRkciAqLworI2Rl ZmluZSBTT1VSQ0VfSERUWF9DQVIJCQkweDA5MDAKKyNkZWZpbmUgU09VUkNFX0RQVFhfQ0FSCQkJ MHgwOTA0CisjZGVmaW5lIFNPVVJDRV9QSFlfQ0FSCQkJMHgwOTA4CisjZGVmaW5lIFNPVVJDRV9D RUNfQ0FSCQkJMHgwOTBjCisjZGVmaW5lIFNPVVJDRV9DQlVTX0NBUgkJCTB4MDkxMAorI2RlZmlu ZSBTT1VSQ0VfUEtUX0NBUgkJCTB4MDkxOAorI2RlZmluZSBTT1VSQ0VfQUlGX0NBUgkJCTB4MDkx YworI2RlZmluZSBTT1VSQ0VfQ0lQSEVSX0NBUgkJMHgwOTIwCisjZGVmaW5lIFNPVVJDRV9DUllQ VE9fQ0FSCQkweDA5MjQKKworLyogY2xvY2sgbWV0ZXJzIGFkZHIgKi8KKyNkZWZpbmUgQ01fQ1RS TAkJCQkweDBhMDAKKyNkZWZpbmUgQ01fSTJTX0NUUkwJCQkweDBhMDQKKyNkZWZpbmUgQ01fU1BE SUZfQ1RSTAkJCTB4MGEwOAorI2RlZmluZSBDTV9WSURfQ1RSTAkJCTB4MGEwYworI2RlZmluZSBD TV9MQU5FX0NUUkwJCQkweDBhMTAKKyNkZWZpbmUgSTJTX05NX1NUQUJMRQkJCTB4MGExNAorI2Rl ZmluZSBJMlNfTkNUU19TVEFCTEUJCQkweDBhMTgKKyNkZWZpbmUgU1BESUZfTk1fU1RBQkxFCQkJ MHgwYTFjCisjZGVmaW5lIFNQRElGX05DVFNfU1RBQkxFCQkweDBhMjAKKyNkZWZpbmUgTk1WSURf TUVBU19TVEFCTEUJCTB4MGEyNAorI2RlZmluZSBJMlNfTUVBUwkJCTB4MGE0MAorI2RlZmluZSBT UERJRl9NRUFTCQkJMHgwYTgwCisjZGVmaW5lIE5NVklEX01FQVMJCQkweDBhYzAKKworLyogc291 cmNlIHZpZiBhZGRyICovCisjZGVmaW5lIEJORF9IU1lOQzJWU1lOQwkJCTB4MGIwMAorI2RlZmlu ZSBIU1lOQzJWU1lOQ19GMV9MMQkJMHgwYjA0CisjZGVmaW5lIEhTWU5DMlZTWU5DX0YyX0wxCQkw eDBiMDgKKyNkZWZpbmUgSFNZTkMyVlNZTkNfU1RBVFVTCQkweDBiMGMKKyNkZWZpbmUgSFNZTkMy VlNZTkNfUE9MX0NUUkwJCTB4MGIxMAorCisvKiBkcHR4IHBoeSBhZGRyICovCisjZGVmaW5lIERQ X1RYX1BIWV9DT05GSUdfUkVHCQkweDIwMDAKKyNkZWZpbmUgRFBfVFhfUEhZX1NUQVRVU19SRUcJ CTB4MjAwNAorI2RlZmluZSBEUF9UWF9QSFlfU1dfUkVTRVQJCTB4MjAwOAorI2RlZmluZSBEUF9U WF9QSFlfU0NSQU1CTEVSX1NFRUQJMHgyMDBjCisjZGVmaW5lIERQX1RYX1BIWV9UUkFJTklOR18w MV8wNAkweDIwMTAKKyNkZWZpbmUgRFBfVFhfUEhZX1RSQUlOSU5HXzA1XzA4CTB4MjAxNAorI2Rl ZmluZSBEUF9UWF9QSFlfVFJBSU5JTkdfMDlfMTAJMHgyMDE4CisjZGVmaW5lIFRFU1RfQ09SCQkJ MHgyM2ZjCisKKy8qIGRwdHggaHBkIGFkZHIgKi8KKyNkZWZpbmUgSFBEX0lSUV9ERVRfTUlOX1RJ TUVSCQkweDIxMDAKKyNkZWZpbmUgSFBEX0lSUV9ERVRfTUFYX1RJTUVSCQkweDIxMDQKKyNkZWZp bmUgSFBEX1VOUExHRURfREVUX01JTl9USU1FUgkweDIxMDgKKyNkZWZpbmUgSFBEX1NUQUJMRV9U SU1FUgkJMHgyMTBjCisjZGVmaW5lIEhQRF9GSUxURVJfVElNRVIJCTB4MjExMAorI2RlZmluZSBI UERfRVZFTlRfTUFTSwkJCTB4MjExYworI2RlZmluZSBIUERfRVZFTlRfREVUCQkJMHgyMTIwCisK Ky8qIGRweXggZnJhbWVyIGFkZHIgKi8KKyNkZWZpbmUgRFBfRlJBTUVSX0dMT0JBTF9DT05GSUcJ CTB4MjIwMAorI2RlZmluZSBEUF9TV19SRVNFVAkJCTB4MjIwNAorI2RlZmluZSBEUF9GUkFNRVJf VFUJCQkweDIyMDgKKyNkZWZpbmUgRFBfRlJBTUVSX1BYTF9SRVBSCQkweDIyMGMKKyNkZWZpbmUg RFBfRlJBTUVSX1NQCQkJMHgyMjEwCisjZGVmaW5lIEFVRElPX1BBQ0tfQ09OVFJPTAkJMHgyMjE0 CisjZGVmaW5lIERQX1ZDX1RBQkxFKHgpCQkJKDB4MjIxOCArICgoeCkgPDwgMikpCisjZGVmaW5l IERQX1ZCX0lECQkJMHgyMjU4CisjZGVmaW5lIERQX01UUEhfTFZQX0NPTlRST0wJCTB4MjI1Ywor I2RlZmluZSBEUF9NVFBIX1NZTUJPTF9WQUxVRVMJCTB4MjI2MAorI2RlZmluZSBEUF9NVFBIX0VD Rl9DT05UUk9MCQkweDIyNjQKKyNkZWZpbmUgRFBfTVRQSF9BQ1RfQ09OVFJPTAkJMHgyMjY4Cisj ZGVmaW5lIERQX01UUEhfU1RBVFVTCQkJMHgyMjZjCisjZGVmaW5lIERQX0lOVEVSUlVQVF9TT1VS Q0UJCTB4MjI3MAorI2RlZmluZSBEUF9JTlRFUlJVUFRfTUFTSwkJMHgyMjc0CisjZGVmaW5lIERQ X0ZST05UX0JBQ0tfUE9SQ0gJCTB4MjI3OAorI2RlZmluZSBEUF9CWVRFX0NPVU5UCQkJMHgyMjdj CisKKy8qIGRwdHggc3RyZWFtIGFkZHIgKi8KKyNkZWZpbmUgTVNBX0hPUklaT05UQUxfMAkJMHgy MjgwCisjZGVmaW5lIE1TQV9IT1JJWk9OVEFMXzEJCTB4MjI4NAorI2RlZmluZSBNU0FfVkVSVElD QUxfMAkJCTB4MjI4OAorI2RlZmluZSBNU0FfVkVSVElDQUxfMQkJCTB4MjI4YworI2RlZmluZSBN U0FfTUlTQwkJCTB4MjI5MAorI2RlZmluZSBTVFJFQU1fQ09ORklHCQkJMHgyMjk0CisjZGVmaW5l IEFVRElPX1BBQ0tfU1RBVFVTCQkweDIyOTgKKyNkZWZpbmUgVklGX1NUQVRVUwkJCTB4MjI5Ywor I2RlZmluZSBQQ0tfU1RVRkZfU1RBVFVTXzAJCTB4MjJhMAorI2RlZmluZSBQQ0tfU1RVRkZfU1RB VFVTXzEJCTB4MjJhNAorI2RlZmluZSBJTkZPX1BBQ0tfU1RBVFVTCQkweDIyYTgKKyNkZWZpbmUg UkFURV9HT1ZFUk5PUl9TVEFUVVMJCTB4MjJhYworI2RlZmluZSBEUF9IT1JJWk9OVEFMCQkJMHgy MmIwCisjZGVmaW5lIERQX1ZFUlRJQ0FMXzAJCQkweDIyYjQKKyNkZWZpbmUgRFBfVkVSVElDQUxf MQkJCTB4MjJiOAorI2RlZmluZSBEUF9CTE9DS19TRFAJCQkweDIyYmMKKworLyogZHB0eCBnbGJs IGFkZHIgKi8KKyNkZWZpbmUgRFBUWF9MQU5FX0VOCQkJMHgyMzAwCisjZGVmaW5lIERQVFhfRU5I TkNECQkJMHgyMzA0CisjZGVmaW5lIERQVFhfSU5UX01BU0sJCQkweDIzMDgKKyNkZWZpbmUgRFBU WF9JTlRfU1RBVFVTCQkJMHgyMzBjCisKKy8qIGRwIGF1eCBhZGRyICovCisjZGVmaW5lIERQX0FV WF9IT1NUX0NPTlRST0wJCTB4MjgwMAorI2RlZmluZSBEUF9BVVhfSU5URVJSVVBUX1NPVVJDRQkJ MHgyODA0CisjZGVmaW5lIERQX0FVWF9JTlRFUlJVUFRfTUFTSwkJMHgyODA4CisjZGVmaW5lIERQ X0FVWF9TV0FQX0lOVkVSU0lPTl9DT05UUk9MCTB4MjgwYworI2RlZmluZSBEUF9BVVhfU0VORF9O QUNLX1RSQU5TQUNUSU9OCTB4MjgxMAorI2RlZmluZSBEUF9BVVhfQ0xFQVJfUlgJCQkweDI4MTQK KyNkZWZpbmUgRFBfQVVYX0NMRUFSX1RYCQkJMHgyODE4CisjZGVmaW5lIERQX0FVWF9USU1FUl9T VE9QCQkweDI4MWMKKyNkZWZpbmUgRFBfQVVYX1RJTUVSX0NMRUFSCQkweDI4MjAKKyNkZWZpbmUg RFBfQVVYX1JFU0VUX1NXCQkJMHgyODI0CisjZGVmaW5lIERQX0FVWF9ESVZJREVfMk0JCTB4Mjgy OAorI2RlZmluZSBEUF9BVVhfVFhfUFJFQUNIQVJHRV9MRU5HVEgJMHgyODJjCisjZGVmaW5lIERQ X0FVWF9GUkVRVUVOQ1lfMU1fTUFYCQkweDI4MzAKKyNkZWZpbmUgRFBfQVVYX0ZSRVFVRU5DWV8x TV9NSU4JCTB4MjgzNAorI2RlZmluZSBEUF9BVVhfUlhfUFJFX01JTgkJMHgyODM4CisjZGVmaW5l IERQX0FVWF9SWF9QUkVfTUFYCQkweDI4M2MKKyNkZWZpbmUgRFBfQVVYX1RJTUVSX1BSRVNFVAkJ MHgyODQwCisjZGVmaW5lIERQX0FVWF9OQUNLX0ZPUk1BVAkJMHgyODQ0CisjZGVmaW5lIERQX0FV WF9UWF9EQVRBCQkJMHgyODQ4CisjZGVmaW5lIERQX0FVWF9SWF9EQVRBCQkJMHgyODRjCisjZGVm aW5lIERQX0FVWF9UWF9TVEFUVVMJCTB4Mjg1MAorI2RlZmluZSBEUF9BVVhfUlhfU1RBVFVTCQkw eDI4NTQKKyNkZWZpbmUgRFBfQVVYX1JYX0NZQ0xFX0NPVU5URVIJCTB4Mjg1OAorI2RlZmluZSBE UF9BVVhfTUFJTl9TVEFURVMJCTB4Mjg1YworI2RlZmluZSBEUF9BVVhfTUFJTl9USU1FUgkJMHgy ODYwCisjZGVmaW5lIERQX0FVWF9BRkVfT1VUCQkJMHgyODY0CisKKy8qIGNyeXB0byBhZGRyICov CisjZGVmaW5lIENSWVBUT19IRENQX1JFVklTSU9OCQkweDU4MDAKKyNkZWZpbmUgSERDUF9DUllQ VE9fQ09ORklHCQkweDU4MDQKKyNkZWZpbmUgQ1JZUFRPX0lOVEVSUlVQVF9TT1VSQ0UJCTB4NTgw OAorI2RlZmluZSBDUllQVE9fSU5URVJSVVBUX01BU0sJCTB4NTgwYworI2RlZmluZSBDUllQVE8y Ml9DT05GSUcJCQkweDU4MTgKKyNkZWZpbmUgQ1JZUFRPMjJfU1RBVFVTCQkJMHg1ODFjCisjZGVm aW5lIFNIQV8yNTZfREFUQV9JTgkJCTB4NTgzYworI2RlZmluZSBTSEFfMjU2X0RBVEFfT1VUXyh4 KQkJKDB4NTg1MCArICgoeCkgPDwgMikpCisjZGVmaW5lIEFFU18zMl9LRVlfKHgpCQkJKDB4NTg3 MCArICgoeCkgPDwgMikpCisjZGVmaW5lIEFFU18zMl9EQVRBX0lOCQkJMHg1ODgwCisjZGVmaW5l IEFFU18zMl9EQVRBX09VVF8oeCkJCSgweDU4ODQgKyAoKHgpIDw8IDIpKQorI2RlZmluZSBDUllQ VE8xNF9DT05GSUcJCQkweDU4YTAKKyNkZWZpbmUgQ1JZUFRPMTRfU1RBVFVTCQkJMHg1OGE0Cisj ZGVmaW5lIENSWVBUTzE0X1BSTk1fT1VUCQkweDU4YTgKKyNkZWZpbmUgQ1JZUFRPMTRfS01fMAkJ CTB4NThhYworI2RlZmluZSBDUllQVE8xNF9LTV8xCQkJMHg1OGIwCisjZGVmaW5lIENSWVBUTzE0 X0FOXzAJCQkweDU4YjQKKyNkZWZpbmUgQ1JZUFRPMTRfQU5fMQkJCTB4NThiOAorI2RlZmluZSBD UllQVE8xNF9ZT1VSX0tTVl8wCQkweDU4YmMKKyNkZWZpbmUgQ1JZUFRPMTRfWU9VUl9LU1ZfMQkJ MHg1OGMwCisjZGVmaW5lIENSWVBUTzE0X01JXzAJCQkweDU4YzQKKyNkZWZpbmUgQ1JZUFRPMTRf TUlfMQkJCTB4NThjOAorI2RlZmluZSBDUllQVE8xNF9USV8wCQkJMHg1OGNjCisjZGVmaW5lIENS WVBUTzE0X0tJXzAJCQkweDU4ZDAKKyNkZWZpbmUgQ1JZUFRPMTRfS0lfMQkJCTB4NThkNAorI2Rl ZmluZSBDUllQVE8xNF9CTE9DS1NfTlVNCQkweDU4ZDgKKyNkZWZpbmUgQ1JZUFRPMTRfS0VZX01F TV9EQVRBXzAJCTB4NThkYworI2RlZmluZSBDUllQVE8xNF9LRVlfTUVNX0RBVEFfMQkJMHg1OGUw CisjZGVmaW5lIENSWVBUTzE0X1NIQTFfTVNHX0RBVEEJCTB4NThlNAorI2RlZmluZSBDUllQVE8x NF9TSEExX1ZfVkFMVUVfKHgpCSgweDU4ZTggKyAoKHgpIDw8IDIpKQorI2RlZmluZSBUUk5HX0NU UkwJCQkweDU4ZmMKKyNkZWZpbmUgVFJOR19EQVRBX1JEWQkJCTB4NTkwMAorI2RlZmluZSBUUk5H X0RBVEEJCQkweDU5MDQKKworLyogY2lwaGVyIGFkZHIgKi8KKyNkZWZpbmUgSERDUF9SRVZJU0lP TgkJCTB4NjAwMDAKKyNkZWZpbmUgSU5URVJSVVBUX1NPVVJDRQkJMHg2MDAwNAorI2RlZmluZSBJ TlRFUlJVUFRfTUFTSwkJCTB4NjAwMDgKKyNkZWZpbmUgSERDUF9DSVBIRVJfQ09ORklHCQkweDYw MDBjCisjZGVmaW5lIEFFU18xMjhfS0VZXzAJCQkweDYwMDEwCisjZGVmaW5lIEFFU18xMjhfS0VZ XzEJCQkweDYwMDE0CisjZGVmaW5lIEFFU18xMjhfS0VZXzIJCQkweDYwMDE4CisjZGVmaW5lIEFF U18xMjhfS0VZXzMJCQkweDYwMDFjCisjZGVmaW5lIEFFU18xMjhfUkFORE9NXzAJCTB4NjAwMjAK KyNkZWZpbmUgQUVTXzEyOF9SQU5ET01fMQkJMHg2MDAyNAorI2RlZmluZSBDSVBIRVIxNF9LTV8w CQkJMHg2MDAyOAorI2RlZmluZSBDSVBIRVIxNF9LTV8xCQkJMHg2MDAyYworI2RlZmluZSBDSVBI RVIxNF9TVEFUVVMJCQkweDYwMDMwCisjZGVmaW5lIENJUEhFUjE0X1JJX1BKX1NUQVRVUwkJMHg2 MDAzNAorI2RlZmluZSBDSVBIRVJfTU9ERQkJCTB4NjAwMzgKKyNkZWZpbmUgQ0lQSEVSMTRfQU5f MAkJCTB4NjAwM2MKKyNkZWZpbmUgQ0lQSEVSMTRfQU5fMQkJCTB4NjAwNDAKKyNkZWZpbmUgQ0lQ SEVSMjJfQVVUSAkJCTB4NjAwNDQKKyNkZWZpbmUgQ0lQSEVSMTRfUjBfRFBfU1RBVFVTCQkweDYw MDQ4CisjZGVmaW5lIENJUEhFUjE0X0JPT1RTVFJBUAkJMHg2MDA0YworCisjZGVmaW5lIERQVFhf RlJNUl9EQVRBX0NMS19SU1ROX0VOCUJJVCgxMSkKKyNkZWZpbmUgRFBUWF9GUk1SX0RBVEFfQ0xL X0VOCQlCSVQoMTApCisjZGVmaW5lIERQVFhfUEhZX0RBVEFfUlNUTl9FTgkJQklUKDkpCisjZGVm aW5lIERQVFhfUEhZX0RBVEFfQ0xLX0VOCQlCSVQoOCkKKyNkZWZpbmUgRFBUWF9QSFlfQ0hBUl9S U1ROX0VOCQlCSVQoNykKKyNkZWZpbmUgRFBUWF9QSFlfQ0hBUl9DTEtfRU4JCUJJVCg2KQorI2Rl ZmluZSBTT1VSQ0VfQVVYX1NZU19DTEtfUlNUTl9FTglCSVQoNSkKKyNkZWZpbmUgU09VUkNFX0FV WF9TWVNfQ0xLX0VOCQlCSVQoNCkKKyNkZWZpbmUgRFBUWF9TWVNfQ0xLX1JTVE5fRU4JCUJJVCgz KQorI2RlZmluZSBEUFRYX1NZU19DTEtfRU4JCQlCSVQoMikKKyNkZWZpbmUgQ0ZHX0RQVFhfVklG X0NMS19SU1ROX0VOCUJJVCgxKQorI2RlZmluZSBDRkdfRFBUWF9WSUZfQ0xLX0VOCQlCSVQoMCkK KworI2RlZmluZSBTT1VSQ0VfUEhZX1JTVE5fRU4JCUJJVCgxKQorI2RlZmluZSBTT1VSQ0VfUEhZ X0NMS19FTgkJQklUKDApCisKKyNkZWZpbmUgU09VUkNFX1BLVF9TWVNfUlNUTl9FTgkJQklUKDMp CisjZGVmaW5lIFNPVVJDRV9QS1RfU1lTX0NMS19FTgkJQklUKDIpCisjZGVmaW5lIFNPVVJDRV9Q S1RfREFUQV9SU1ROX0VOCQlCSVQoMSkKKyNkZWZpbmUgU09VUkNFX1BLVF9EQVRBX0NMS19FTgkJ QklUKDApCisKKyNkZWZpbmUgU1BESUZfQ0RSX0NMS19SU1ROX0VOCQlCSVQoNSkKKyNkZWZpbmUg U1BESUZfQ0RSX0NMS19FTgkJQklUKDQpCisjZGVmaW5lIFNPVVJDRV9BSUZfU1lTX1JTVE5fRU4J CUJJVCgzKQorI2RlZmluZSBTT1VSQ0VfQUlGX1NZU19DTEtfRU4JCUJJVCgyKQorI2RlZmluZSBT T1VSQ0VfQUlGX0NMS19SU1ROX0VOCQlCSVQoMSkKKyNkZWZpbmUgU09VUkNFX0FJRl9DTEtfRU4J CUJJVCgwKQorCisjZGVmaW5lIFNPVVJDRV9DSVBIRVJfU1lTVEVNX0NMS19SU1ROX0VOCUJJVCgz KQorI2RlZmluZSBTT1VSQ0VfQ0lQSEVSX1NZU19DTEtfRU4JCUJJVCgyKQorI2RlZmluZSBTT1VS Q0VfQ0lQSEVSX0NIQVJfQ0xLX1JTVE5fRU4JCUJJVCgxKQorI2RlZmluZSBTT1VSQ0VfQ0lQSEVS X0NIQVJfQ0xLX0VOCQlCSVQoMCkKKworI2RlZmluZSBTT1VSQ0VfQ1JZUFRPX1NZU19DTEtfUlNU Tl9FTglCSVQoMSkKKyNkZWZpbmUgU09VUkNFX0NSWVBUT19TWVNfQ0xLX0VOCUJJVCgwKQorCisj ZGVmaW5lIEFQQl9JUkFNX1BBVEgJCQlCSVQoMikKKyNkZWZpbmUgQVBCX0RSQU1fUEFUSAkJCUJJ VCgxKQorI2RlZmluZSBBUEJfWFRfUkVTRVQJCQlCSVQoMCkKKworI2RlZmluZSBNQUlMQk9YX0lO VF9NQVNLX0JJVAkJQklUKDEpCisjZGVmaW5lIFBJRl9JTlRfTUFTS19CSVQJCUJJVCgwKQorI2Rl ZmluZSBBTExfSU5UX01BU0sJCQkzCisKKy8qIG1haWxib3ggKi8KKyNkZWZpbmUgTUJfT1BDT0RF X0lECQkJMAorI2RlZmluZSBNQl9NT0RVTEVfSUQJCQkxCisjZGVmaW5lIE1CX1NJWkVfTVNCX0lE CQkJMgorI2RlZmluZSBNQl9TSVpFX0xTQl9JRAkJCTMKKyNkZWZpbmUgTUJfREFUQV9JRAkJCTQK KworI2RlZmluZSBNQl9NT0RVTEVfSURfRFBfVFgJCTB4MDEKKyNkZWZpbmUgTUJfTU9EVUxFX0lE X0hEQ1BfVFgJCTB4MDcKKyNkZWZpbmUgTUJfTU9EVUxFX0lEX0hEQ1BfUlgJCTB4MDgKKyNkZWZp bmUgTUJfTU9EVUxFX0lEX0hEQ1BfR0VORVJBTAkweDA5CisjZGVmaW5lIE1CX01PRFVMRV9JRF9H RU5FUkFMCQkweDBhCisKKy8qIGdlbmVyYWwgb3Bjb2RlICovCisjZGVmaW5lIEdFTkVSQUxfTUFJ Tl9DT05UUk9MICAgICAgICAgICAgMHgwMQorI2RlZmluZSBHRU5FUkFMX1RFU1RfRUNITyAgICAg ICAgICAgICAgIDB4MDIKKyNkZWZpbmUgR0VORVJBTF9CVVNfU0VUVElOR1MgICAgICAgICAgICAw eDAzCisjZGVmaW5lIEdFTkVSQUxfVEVTVF9BQ0NFU1MgICAgICAgICAgICAgMHgwNAorCisjZGVm aW5lIERQVFhfU0VUX1BPV0VSX01ORwkJCTB4MDAKKyNkZWZpbmUgRFBUWF9TRVRfSE9TVF9DQVBB QklMSVRJRVMJCTB4MDEKKyNkZWZpbmUgRFBUWF9HRVRfRURJRAkJCQkweDAyCisjZGVmaW5lIERQ VFhfUkVBRF9EUENECQkJCTB4MDMKKyNkZWZpbmUgRFBUWF9XUklURV9EUENECQkJCTB4MDQKKyNk ZWZpbmUgRFBUWF9FTkFCTEVfRVZFTlQJCQkweDA1CisjZGVmaW5lIERQVFhfV1JJVEVfUkVHSVNU RVIJCQkweDA2CisjZGVmaW5lIERQVFhfUkVBRF9SRUdJU1RFUgkJCTB4MDcKKyNkZWZpbmUgRFBU WF9XUklURV9GSUVMRAkJCTB4MDgKKyNkZWZpbmUgRFBUWF9UUkFJTklOR19DT05UUk9MCQkJMHgw OQorI2RlZmluZSBEUFRYX1JFQURfRVZFTlQJCQkJMHgwYQorI2RlZmluZSBEUFRYX1JFQURfTElO S19TVEFUCQkJMHgwYgorI2RlZmluZSBEUFRYX1NFVF9WSURFTwkJCQkweDBjCisjZGVmaW5lIERQ VFhfU0VUX0FVRElPCQkJCTB4MGQKKyNkZWZpbmUgRFBUWF9HRVRfTEFTVF9BVVhfU1RBVVMJCQkw eDBlCisjZGVmaW5lIERQVFhfU0VUX0xJTktfQlJFQUtfUE9JTlQJCTB4MGYKKyNkZWZpbmUgRFBU WF9GT1JDRV9MQU5FUwkJCTB4MTAKKyNkZWZpbmUgRFBUWF9IUERfU1RBVEUJCQkJMHgxMQorCisj ZGVmaW5lIEZXX1NUQU5EQlkJCQkJMAorI2RlZmluZSBGV19BQ1RJVkUJCQkJMQorCisjZGVmaW5l IERQVFhfRVZFTlRfRU5BQkxFX0hQRAkJCUJJVCgwKQorI2RlZmluZSBEUFRYX0VWRU5UX0VOQUJM RV9UUkFJTklORwkJQklUKDEpCisKKyNkZWZpbmUgTElOS19UUkFJTklOR19OT1RfQUNUSVZFCQkw CisjZGVmaW5lIExJTktfVFJBSU5JTkdfUlVOCQkJMQorI2RlZmluZSBMSU5LX1RSQUlOSU5HX1JF U1RBUlQJCQkyCisKKyNkZWZpbmUgQ09OVFJPTF9WSURFT19JRExFCQkJMAorI2RlZmluZSBDT05U Uk9MX1ZJREVPX1ZBTElECQkJMQorCisjZGVmaW5lIFZJRl9CWVBBU1NfSU5URVJMQUNFCQkJQklU KDEzKQorI2RlZmluZSBJTlRFUkxBQ0VfRk1UX0RFVAkJCUJJVCgxMikKKyNkZWZpbmUgSU5URVJM QUNFX0RUQ1RfV0lOCQkJMHgyMAorCisjZGVmaW5lIERQX0ZSQU1FUl9TUF9JTlRFUkxBQ0VfRU4J CUJJVCgyKQorI2RlZmluZSBEUF9GUkFNRVJfU1BfSFNQCQkJQklUKDEpCisjZGVmaW5lIERQX0ZS QU1FUl9TUF9WU1AJCQlCSVQoMCkKKworLyogY2FwYWJpbGl0eSAqLworI2RlZmluZSBBVVhfSE9T VF9JTlZFUlQJCQkJMworI2RlZmluZQlGQVNUX0xUX1NVUFBPUlQJCQkJMQorI2RlZmluZSBGQVNU X0xUX05PVF9TVVBQT1JUCQkJMAorI2RlZmluZSBMQU5FX01BUFBJTkdfTk9STUFMCQkJMHgxYgor I2RlZmluZSBMQU5FX01BUFBJTkdfRkxJUFBFRAkJCTB4ZTQKKyNkZWZpbmUgRU5IQU5DRUQJCQkJ MQorCisjZGVmaW5lCUZVTExfTFRfU1RBUlRFRAkJCQlCSVQoMCkKKyNkZWZpbmUgRkFTRV9MVF9T VEFSVEVECQkJCUJJVCgxKQorI2RlZmluZSBDTEtfUkVDT1ZFUllfRklOSVNIRUQJCQlCSVQoMikK KyNkZWZpbmUgRVFfUEhBU0VfRklOSVNIRUQJCQlCSVQoMykKKyNkZWZpbmUgRkFTRV9MVF9TVEFS VF9GSU5JU0hFRAkJCUJJVCg0KQorI2RlZmluZSBDTEtfUkVDT1ZFUllfRkFJTEVECQkJQklUKDUp CisjZGVmaW5lIEVRX1BIQVNFX0ZBSUxFRAkJCQlCSVQoNikKKyNkZWZpbmUgRkFTRV9MVF9GQUlM RUQJCQkJQklUKDcpCisKKyNkZWZpbmUgRFBUWF9IUERfRVZFTlQJCQkJQklUKDApCisjZGVmaW5l IERQVFhfVFJBSU5JTkdfRVZFTlQJCQlCSVQoMSkKKyNkZWZpbmUgSERDUF9UWF9TVEFUVVNfRVZF TlQJCQlCSVQoNCkKKyNkZWZpbmUgSERDUDJfVFhfSVNfS01fU1RPUkVEX0VWRU5UCQlCSVQoNSkK KyNkZWZpbmUgSERDUDJfVFhfU1RPUkVfS01fRVZFTlQJCQlCSVQoNikKKyNkZWZpbmUgSERDUF9U WF9JU19SRUNFSVZFUl9JRF9WQUxJRF9FVkVOVAlCSVQoNykKKworI2RlZmluZSBUVV9TSVpFCQkJ CQkzMAorI2RlZmluZSBDRE5fRFBfTUFYX0xJTktfUkFURQkJCURQX0xJTktfQldfNV80CisKKy8q IGF1ZGlvICovCisjZGVmaW5lIEFVRElPX1BBQ0tfRU4JCQkJQklUKDgpCisjZGVmaW5lIFNBTVBM SU5HX0ZSRVEoeCkJCQkoKCh4KSAmIDB4ZikgPDwgMTYpCisjZGVmaW5lIE9SSUdJTkFMX1NBTVBf RlJFUSh4KQkJCSgoKHgpICYgMHhmKSA8PCAyNCkKKyNkZWZpbmUgU1lOQ19XUl9UT19DSF9aRVJP CQkJQklUKDEpCisjZGVmaW5lIEkyU19ERUNfU1RBUlQJCQkJQklUKDEpCisjZGVmaW5lIEFVRElP X1NXX1JTVAkJCQlCSVQoMCkKKyNkZWZpbmUgU01QTDJQS1RfRU4JCQkJQklUKDEpCisjZGVmaW5l IE1BWF9OVU1fQ0goeCkJCQkJKCgoeCkgJiAweDFmKSAtIDEpCisjZGVmaW5lIE5VTV9PRl9JMlNf UE9SVFMoeCkJCQkoKCgoeCkgLyAyIC0gMSkgJiAweDMpIDw8IDUpCisjZGVmaW5lIEFVRElPX1RZ UEVfTFBDTQkJCQkoMiA8PCA3KQorI2RlZmluZSBDRkdfU1VCX1BDS1RfTlVNKHgpCQkJKCgoKHgp IC0gMSkgJiAweDcpIDw8IDExKQorI2RlZmluZSBBVURJT19DSF9OVU0oeCkJCQkJKCgoKHgpIC0g MSkgJiAweDFmKSA8PCAyKQorI2RlZmluZSBUUkFOU19TTVBMX1dJRFRIXzE2CQkJMAorI2RlZmlu ZSBUUkFOU19TTVBMX1dJRFRIXzI0CQkJQklUKDExKQorI2RlZmluZSBUUkFOU19TTVBMX1dJRFRI XzMyCQkJKDIgPDwgMTEpCisjZGVmaW5lIEkyU19ERUNfUE9SVF9FTih4KQkJCSgoKHgpICYgMHhm KSA8PCAxNykKKyNkZWZpbmUgU1BESUZfRU5BQkxFCQkJCUJJVCgyMSkKKyNkZWZpbmUgU1BESUZf QVZHX1NFTAkJCQlCSVQoMjApCisjZGVmaW5lIFNQRElGX0pJVFRFUl9CWVBBU1MJCQlCSVQoMTkp CisjZGVmaW5lIFNQRElGX0ZJRk9fTUlEX1JBTkdFKHgpCQkJKCgoeCkgJiAweGZmKSA8PCAxMSkK KyNkZWZpbmUgU1BESUZfSklUVEVSX1RIUlNIKHgpCQkJKCgoeCkgJiAweGZmKSA8PCAzKQorI2Rl ZmluZSBTUERJRl9KSVRURVJfQVZHX1dJTih4KQkJCSgoeCkgJiAweDcpCisKKy8qIFJlZmVybmNl IGN5Y2xlcyB3aGVuIHVzaW5nIGxhbmUgY2xvY2sgYXMgcmVmZXJuY2UgKi8KKyNkZWZpbmUgTEFO RV9SRUZfQ1lDCQkJCTB4ODAwMAorCitlbnVtIHZvbHRhZ2Vfc3dpbmdfbGV2ZWwgeworCVZPTFRB R0VfTEVWRUxfMCwKKwlWT0xUQUdFX0xFVkVMXzEsCisJVk9MVEFHRV9MRVZFTF8yLAorCVZPTFRB R0VfTEVWRUxfMywKK307CisKK2VudW0gcHJlX2VtcGhhc2lzX2xldmVsIHsKKwlQUkVfRU1QSEFT SVNfTEVWRUxfMCwKKwlQUkVfRU1QSEFTSVNfTEVWRUxfMSwKKwlQUkVfRU1QSEFTSVNfTEVWRUxf MiwKKwlQUkVfRU1QSEFTSVNfTEVWRUxfMywKK307CisKK2VudW0gcGF0dGVybl9zZXQgeworCVBU UzEJCT0gQklUKDApLAorCVBUUzIJCT0gQklUKDEpLAorCVBUUzMJCT0gQklUKDIpLAorCVBUUzQJ CT0gQklUKDMpLAorCURQX05PTkUJCT0gQklUKDQpCit9OworCitlbnVtIHZpY19jb2xvcl9kZXB0 aCB7CisJQkNTXzYgPSAweDEsCisJQkNTXzggPSAweDIsCisJQkNTXzEwID0gMHg0LAorCUJDU18x MiA9IDB4OCwKKwlCQ1NfMTYgPSAweDEwLAorfTsKKworZW51bSB2aWNfYnRfdHlwZSB7CisJQlRf NjAxID0gMHgwLAorCUJUXzcwOSA9IDB4MSwKK307CisKK3ZvaWQgY2RuX2RwX2Nsb2NrX3Jlc2V0 KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCk7CisKK3ZvaWQgY2RuX2RwX3NldF9md19jbGsoc3Ry dWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1MzIgY2xrKTsKK2ludCBjZG5fZHBfbG9hZF9maXJtd2Fy ZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIGNvbnN0IHUzMiAqaV9tZW0sCisJCQkgdTMyIGlf c2l6ZSwgY29uc3QgdTMyICpkX21lbSwgdTMyIGRfc2l6ZSk7CitpbnQgY2RuX2RwX3NldF9maXJt d2FyZV9hY3RpdmUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCBib29sIGVuYWJsZSk7CitpbnQg Y2RuX2RwX3NldF9ob3N0X2NhcChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHU4IGxhbmVzLCBi b29sIGZsaXApOworaW50IGNkbl9kcF9ldmVudF9jb25maWcoc3RydWN0IGNkbl9kcF9kZXZpY2Ug KmRwKTsKK3UzMiBjZG5fZHBfZ2V0X2V2ZW50KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCk7Citp bnQgY2RuX2RwX2dldF9ocGRfc3RhdHVzKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCk7CitpbnQg Y2RuX2RwX2RwY2Rfd3JpdGUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1MzIgYWRkciwgdTgg dmFsdWUpOworaW50IGNkbl9kcF9kcGNkX3JlYWQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1 MzIgYWRkciwgdTggKmRhdGEsIHUxNiBsZW4pOworaW50IGNkbl9kcF9nZXRfZWRpZF9ibG9jayh2 b2lkICpkcCwgdTggKmVkaWQsCisJCQkgIHVuc2lnbmVkIGludCBibG9jaywgc2l6ZV90IGxlbmd0 aCk7CitpbnQgY2RuX2RwX3RyYWluaW5nX3N0YXJ0KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCk7 CitpbnQgY2RuX2RwX2dldF90cmFpbmluZ19zdGF0dXMoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw KTsKK2ludCBjZG5fZHBfc2V0X3ZpZGVvX3N0YXR1cyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAs IGludCBhY3RpdmUpOworaW50IGNkbl9kcF9jb25maWdfdmlkZW8oc3RydWN0IGNkbl9kcF9kZXZp Y2UgKmRwKTsKK2ludCBjZG5fZHBfYXVkaW9fc3RvcChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAs IHN0cnVjdCBhdWRpb19pbmZvICphdWRpbyk7CitpbnQgY2RuX2RwX2F1ZGlvX211dGUoc3RydWN0 IGNkbl9kcF9kZXZpY2UgKmRwLCBib29sIGVuYWJsZSk7CitpbnQgY2RuX2RwX2F1ZGlvX2NvbmZp ZyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHN0cnVjdCBhdWRpb19pbmZvICphdWRpbyk7Cisj ZW5kaWYgLyogX0NETl9EUF9SRUdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Jv Y2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2Nr Y2hpcF9kcm1fdm9wLmMKaW5kZXggM2I4ZTNiNi4uNmE5NGU3NCAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5jCkBAIC0xMDY0LDkgKzEwNjQsMTEgQEAgc3Rh dGljIHZvaWQgdm9wX2NydGNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAkJdm9wX2Rz cF9ob2xkX3ZhbGlkX2lycV9kaXNhYmxlKHZvcCk7CiAJfQogCi0JcGluX3BvbCA9IDB4ODsKLQlw aW5fcG9sIHw9IChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTkhTWU5DKSA/ IDAgOiAxOwotCXBpbl9wb2wgfD0gKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxB R19OVlNZTkMpID8gMCA6ICgxIDw8IDEpOworCXBpbl9wb2wgPSBCSVQoRENMS19JTlZFUlQpOwor CXBpbl9wb2wgfD0gKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMp ID8KKwkJICAgMCA6IEJJVChIU1lOQ19QT1NJVElWRSk7CisJcGluX3BvbCB8PSAoYWRqdXN0ZWRf bW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05WU1lOQykgPworCQkgICAwIDogQklUKFZTWU5D X1BPU0lUSVZFKTsKIAlWT1BfQ1RSTF9TRVQodm9wLCBwaW5fcG9sLCBwaW5fcG9sKTsKIAogCXN3 aXRjaCAocy0+b3V0cHV0X3R5cGUpIHsKQEAgLTEwODYsNiArMTA4OCwxMSBAQCBzdGF0aWMgdm9p ZCB2b3BfY3J0Y19lbmFibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQogCQlWT1BfQ1RSTF9TRVQo dm9wLCBtaXBpX3Bpbl9wb2wsIHBpbl9wb2wpOwogCQlWT1BfQ1RSTF9TRVQodm9wLCBtaXBpX2Vu LCAxKTsKIAkJYnJlYWs7CisJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQ6CisJ CXBpbl9wb2wgJj0gfkJJVChEQ0xLX0lOVkVSVCk7CisJCVZPUF9DVFJMX1NFVCh2b3AsIGRwX3Bp bl9wb2wsIHBpbl9wb2wpOworCQlWT1BfQ1RSTF9TRVQodm9wLCBkcF9lbiwgMSk7CisJCWJyZWFr OwogCWRlZmF1bHQ6CiAJCURSTV9FUlJPUigidW5zdXBwb3J0IGNvbm5lY3Rvcl90eXBlWyVkXVxu Iiwgcy0+b3V0cHV0X3R5cGUpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2Nr Y2hpcC9yb2NrY2hpcF9kcm1fdm9wLmggYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2No aXBfZHJtX3ZvcC5oCmluZGV4IDFkYmM1MjYuLjVhNGZhYTg1IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5oCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmgKQEAgLTQ1LDYgKzQ1LDcgQEAgc3RydWN0IHZv cF9jdHJsIHsKIAlzdHJ1Y3Qgdm9wX3JlZyBlZHBfZW47CiAJc3RydWN0IHZvcF9yZWcgaGRtaV9l bjsKIAlzdHJ1Y3Qgdm9wX3JlZyBtaXBpX2VuOworCXN0cnVjdCB2b3BfcmVnIGRwX2VuOwogCXN0 cnVjdCB2b3BfcmVnIG91dF9tb2RlOwogCXN0cnVjdCB2b3BfcmVnIGRpdGhlcl9kb3duOwogCXN0 cnVjdCB2b3BfcmVnIGRpdGhlcl91cDsKQEAgLTUzLDYgKzU0LDcgQEAgc3RydWN0IHZvcF9jdHJs IHsKIAlzdHJ1Y3Qgdm9wX3JlZyBoZG1pX3Bpbl9wb2w7CiAJc3RydWN0IHZvcF9yZWcgZWRwX3Bp bl9wb2w7CiAJc3RydWN0IHZvcF9yZWcgbWlwaV9waW5fcG9sOworCXN0cnVjdCB2b3BfcmVnIGRw X3Bpbl9wb2w7CiAKIAlzdHJ1Y3Qgdm9wX3JlZyBodG90YWxfcHc7CiAJc3RydWN0IHZvcF9yZWcg aGFjdF9zdF9lbmQ7CkBAIC0yNDQsNiArMjQ2LDEzIEBAIGVudW0gc2NhbGVfZG93bl9tb2RlIHsK IAlTQ0FMRV9ET1dOX0FWRyA9IDB4MQogfTsKIAorZW51bSB2b3BfcG9sIHsKKwlIU1lOQ19QT1NJ VElWRSA9IDAsCisJVlNZTkNfUE9TSVRJVkUgPSAxLAorCURFTl9ORUdBVElWRSAgID0gMiwKKwlE Q0xLX0lOVkVSVCAgICA9IDMKK307CisKICNkZWZpbmUgRlJBQ18xNl8xNihtdWx0LCBkaXYpICAg ICgoKG11bHQpIDw8IDE2KSAvIChkaXYpKQogI2RlZmluZSBTQ0xfRlRfREVGQVVMVF9GSVhQT0lO VF9TSElGVAkxMgogI2RlZmluZSBTQ0xfTUFYX1ZTS0lQTElORVMJCTQKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF92b3BfcmVnLmMgYi9kcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvcm9ja2NoaXBfdm9wX3JlZy5jCmluZGV4IGVlYTg0MjcuLmFhZWRlNmIgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF92b3BfcmVnLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX3ZvcF9yZWcuYwpAQCAtMjgzLDYg KzI4Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm9wX2RhdGEgcmszMjg4X3ZvcCA9IHsKIHN0 YXRpYyBjb25zdCBzdHJ1Y3Qgdm9wX2N0cmwgcmszMzk5X2N0cmxfZGF0YSA9IHsKIAkuc3RhbmRi eSA9IFZPUF9SRUcoUkszMzk5X1NZU19DVFJMLCAweDEsIDIyKSwKIAkuZ2F0ZV9lbiA9IFZPUF9S RUcoUkszMzk5X1NZU19DVFJMLCAweDEsIDIzKSwKKwkuZHBfZW4gPSBWT1BfUkVHKFJLMzM5OV9T WVNfQ1RSTCwgMHgxLCAxMSksCiAJLnJnYl9lbiA9IFZPUF9SRUcoUkszMzk5X1NZU19DVFJMLCAw eDEsIDEyKSwKIAkuaGRtaV9lbiA9IFZPUF9SRUcoUkszMzk5X1NZU19DVFJMLCAweDEsIDEzKSwK IAkuZWRwX2VuID0gVk9QX1JFRyhSSzMzOTlfU1lTX0NUUkwsIDB4MSwgMTQpLApAQCAtMjkyLDYg KzI5Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm9wX2N0cmwgcmszMzk5X2N0cmxfZGF0YSA9 IHsKIAkuZGF0YV9ibGFuayA9IFZPUF9SRUcoUkszMzk5X0RTUF9DVFJMMCwgMHgxLCAxOSksCiAJ Lm91dF9tb2RlID0gVk9QX1JFRyhSSzMzOTlfRFNQX0NUUkwwLCAweGYsIDApLAogCS5yZ2JfcGlu X3BvbCA9IFZPUF9SRUcoUkszMzk5X0RTUF9DVFJMMSwgMHhmLCAxNiksCisJLmRwX3Bpbl9wb2wg PSBWT1BfUkVHKFJLMzM5OV9EU1BfQ1RSTDEsIDB4ZiwgMTYpLAogCS5oZG1pX3Bpbl9wb2wgPSBW T1BfUkVHKFJLMzM5OV9EU1BfQ1RSTDEsIDB4ZiwgMjApLAogCS5lZHBfcGluX3BvbCA9IFZPUF9S RUcoUkszMzk5X0RTUF9DVFJMMSwgMHhmLCAyNCksCiAJLm1pcGlfcGluX3BvbCA9IFZPUF9SRUco UkszMzk5X0RTUF9DVFJMMSwgMHhmLCAyOCksCi0tIAoxLjkuMQoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmkt ZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==