From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philipp Zabel Subject: [PATCH v12 03/14] drm/mediatek: Add DSI sub driver Date: Tue, 1 Mar 2016 16:20:19 +0100 Message-ID: <1456845630-2786-4-git-send-email-p.zabel@pengutronix.de> References: <1456845630-2786-1-git-send-email-p.zabel@pengutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1456845630-2786-1-git-send-email-p.zabel@pengutronix.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Mark Rutland , Stephen Boyd , Michael Turquette , Jie Qiu , Cawa Cheng , YT Shen , Yingjoe Chen , devicetree@vger.kernel.org, Jitao Shi , kernel@pengutronix.de, Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Matthias Brugger , Paul Bolle , Emil Velikov , Tomasz Figa , Kumar Gala List-Id: linux-mediatek@lists.infradead.org RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkIGEgZHJtIGVu Y29kZXIvY29ubmVjdG9yIGRyaXZlciBmb3IgdGhlIE1JUEkgRFNJIGZ1bmN0aW9uCmJsb2NrIG9m IHRoZSBNZWRpYXRlayBkaXNwbGF5IHN1YnN5c3RlbSBhbmQgYSBwaHkgZHJpdmVyIGZvciB0aGUg TUlQSSBUWApELVBIWSBjb250cm9sIG1vZHVsZS4KClNpZ25lZC1vZmYtYnk6IEppdGFvIFNoaSA8 aml0YW8uc2hpQG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJlbCA8cC56 YWJlbEBwZW5ndXRyb25peC5kZT4KLS0KQ2hhbmdlcyBzaW5jZSB2MTA6CiAtIGFkZCBtaXBpIGRz aSBob3N0IHRvIHBhc3MgdGhlIGRzaSBsYW5lIG51bWJlciwgdmlkZW8gZm9ybWF0LAogICBhbmQg bW9kZV9mbGFnIHRvIGRzaS4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZyAg ICAgICB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgICAgICB8ICAg NCArLQogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMgfCAgIDIgKwogZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmggfCAgIDIgKwogZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19kc2kuYyAgICAgfCA5NDIgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX21pcGlfdHguYyB8IDQ4NyAr KysrKysrKysrKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAxNDM4IGluc2VydGlvbnMoKyksIDEg ZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RzaS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19taXBpX3R4LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZp ZyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCmluZGV4IDhkYWQ4OTIuLjBjNDlh OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCkBAIC0zLDYgKzMsOCBAQCBjb25maWcgRFJN X01FRElBVEVLCiAJZGVwZW5kcyBvbiBEUk0KIAlkZXBlbmRzIG9uIEFSQ0hfTUVESUFURUsgfHwg KEFSTSAmJiBDT01QSUxFX1RFU1QpCiAJc2VsZWN0IERSTV9LTVNfSEVMUEVSCisJc2VsZWN0IERS TV9NSVBJX0RTSQorCXNlbGVjdCBEUk1fUEFORUwKIAlzZWxlY3QgSU9NTVVfRE1BCiAJc2VsZWN0 IE1US19TTUkKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFr ZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKaW5kZXggZDRiZGU3Yy4u ZTc4MWRiNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQor KysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKQEAgLTYsNiArNiw4IEBAIG1l ZGlhdGVrLWRybS15IDo9IG10a19kaXNwX292bC5vIFwKIAkJICBtdGtfZHJtX2Rydi5vIFwKIAkJ ICBtdGtfZHJtX2ZiLm8gXAogCQkgIG10a19kcm1fZ2VtLm8gXAotCQkgIG10a19kcm1fcGxhbmUu bworCQkgIG10a19kcm1fcGxhbmUubyBcCisJCSAgbXRrX2RzaS5vIFwKKwkJICBtdGtfbWlwaV90 eC5vCiAKIG9iai0kKENPTkZJR19EUk1fTUVESUFURUspICs9IG1lZGlhdGVrLWRybS5vCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYyBiL2RyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCmluZGV4IGZjYWJmYWQuLjRjNzdjMDAgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCkBAIC01MzgsNiArNTM4LDggQEAg c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKiBjb25zdCBtdGtfZHJtX2RyaXZlcnNbXSA9 IHsKIAkmbXRrX2RybV9wbGF0Zm9ybV9kcml2ZXIsCiAJJm10a19kaXNwX292bF9kcml2ZXIsCiAJ Jm10a19kaXNwX3JkbWFfZHJpdmVyLAorCSZtdGtfZHNpX2RyaXZlciwKKwkmbXRrX21pcGlfdHhf ZHJpdmVyLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbXRrX2RybV9pbml0KHZvaWQpCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaCBiL2RyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCmluZGV4IDdhNWNiMTcuLjJjZDA0ZTAgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCkBAIC00OSw1ICs0OSw3IEBAIHN0 cnVjdCBtdGtfZHJtX3ByaXZhdGUgewogCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBt dGtfZGlzcF9vdmxfZHJpdmVyOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2Rp c3BfcmRtYV9kcml2ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZHNpX2Ry aXZlcjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19taXBpX3R4X2RyaXZlcjsK IAogI2VuZGlmIC8qIE1US19EUk1fRFJWX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2M2QzODkKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5jCkBAIC0wLDAgKzEsOTQy IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRy bS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVk ZSA8bGludXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxs aW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+CisjaW5jbHVk ZSA8bGludXgvcGh5L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgor I2luY2x1ZGUgPHZpZGVvL3ZpZGVvbW9kZS5oPgorCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29t cC5oIgorCisjZGVmaW5lIERTSV9WSURFT19GSUZPX0RFUFRICSgxOTIwIC8gNCkKKyNkZWZpbmUg RFNJX0hPU1RfRklGT19ERVBUSAk2NAorCisjZGVmaW5lIERTSV9TVEFSVAkJMHgwMAorCisjZGVm aW5lIERTSV9DT05fQ1RSTAkJMHgxMAorI2RlZmluZSBEU0lfUkVTRVQJCQlCSVQoMCkKKyNkZWZp bmUgRFNJX0VOCQkJCUJJVCgxKQorCisjZGVmaW5lIERTSV9NT0RFX0NUUkwJCTB4MTQKKyNkZWZp bmUgTU9ERQkJCQkoMykKKyNkZWZpbmUgQ01EX01PREUJCQkwCisjZGVmaW5lIFNZTkNfUFVMU0Vf TU9ERQkJCTEKKyNkZWZpbmUgU1lOQ19FVkVOVF9NT0RFCQkJMgorI2RlZmluZSBCVVJTVF9NT0RF CQkJMworI2RlZmluZSBGUk1fTU9ERQkJCUJJVCgxNikKKyNkZWZpbmUgTUlYX01PREUJCQlCSVQo MTcpCisKKyNkZWZpbmUgRFNJX1RYUlhfQ1RSTAkJMHgxOAorI2RlZmluZSBWQ19OVU0JCQkJKDIg PDwgMCkKKyNkZWZpbmUgTEFORV9OVU0JCQkoMHhmIDw8IDIpCisjZGVmaW5lIERJU19FT1QJCQkJ QklUKDYpCisjZGVmaW5lIE5VTExfRU4JCQkJQklUKDcpCisjZGVmaW5lIFRFX0ZSRUVSVU4JCQlC SVQoOCkKKyNkZWZpbmUgRVhUX1RFX0VOCQkJQklUKDkpCisjZGVmaW5lIEVYVF9URV9FREdFCQkJ QklUKDEwKQorI2RlZmluZSBNQVhfUlROX1NJWkUJCQkoMHhmIDw8IDEyKQorI2RlZmluZSBIU1RY X0NLTFBfRU4JCQlCSVQoMTYpCisKKyNkZWZpbmUgRFNJX1BTQ1RSTAkJMHgxYworI2RlZmluZSBE U0lfUFNfV0MJCQkweDNmZmYKKyNkZWZpbmUgRFNJX1BTX1NFTAkJCSgzIDw8IDE2KQorI2RlZmlu ZSBQQUNLRURfUFNfMTZCSVRfUkdCNTY1CQkoMCA8PCAxNikKKyNkZWZpbmUgTE9PU0VMWV9QU18x OEJJVF9SR0I2NjYJCSgxIDw8IDE2KQorI2RlZmluZSBQQUNLRURfUFNfMThCSVRfUkdCNjY2CQko MiA8PCAxNikKKyNkZWZpbmUgUEFDS0VEX1BTXzI0QklUX1JHQjg4OAkJKDMgPDwgMTYpCisKKyNk ZWZpbmUgRFNJX1ZTQV9OTAkJMHgyMAorI2RlZmluZSBEU0lfVkJQX05MCQkweDI0CisjZGVmaW5l IERTSV9WRlBfTkwJCTB4MjgKKyNkZWZpbmUgRFNJX1ZBQ1RfTkwJCTB4MkMKKyNkZWZpbmUgRFNJ X0hTQV9XQwkJMHg1MAorI2RlZmluZSBEU0lfSEJQX1dDCQkweDU0CisjZGVmaW5lIERTSV9IRlBf V0MJCTB4NTgKKworI2RlZmluZSBEU0lfSFNUWF9DS0xfV0MJCTB4NjQKKworI2RlZmluZSBEU0lf UEhZX0xDQ09OCQkweDEwNAorI2RlZmluZSBMQ19IU19UWF9FTgkJCUJJVCgwKQorI2RlZmluZSBM Q19VTFBNX0VOCQkJQklUKDEpCisjZGVmaW5lIExDX1dBS0VVUF9FTgkJCUJJVCgyKQorCisjZGVm aW5lIERTSV9QSFlfTEQwQ09OCQkweDEwOAorI2RlZmluZSBMRDBfSFNfVFhfRU4JCQlCSVQoMCkK KyNkZWZpbmUgTEQwX1VMUE1fRU4JCQlCSVQoMSkKKyNkZWZpbmUgTEQwX1dBS0VVUF9FTgkJCUJJ VCgyKQorCisjZGVmaW5lIERTSV9QSFlfVElNRUNPTjAJMHgxMTAKKyNkZWZpbmUgTFBYCQkJCSgw eGZmIDw8IDApCisjZGVmaW5lIEhTX1BSUFIJCQkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUgSFNfWkVS TwkJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgSFNfVFJBSUwJCQkoMHhmZiA8PCAyNCkKKworI2Rl ZmluZSBEU0lfUEhZX1RJTUVDT04xCTB4MTE0CisjZGVmaW5lIFRBX0dPCQkJCSgweGZmIDw8IDAp CisjZGVmaW5lIFRBX1NVUkUJCQkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUgVEFfR0VUCQkJCSgweGZm IDw8IDE2KQorI2RlZmluZSBEQV9IU19FWElUCQkJKDB4ZmYgPDwgMjQpCisKKyNkZWZpbmUgRFNJ X1BIWV9USU1FQ09OMgkweDExOAorI2RlZmluZSBDT05UX0RFVAkJCSgweGZmIDw8IDApCisjZGVm aW5lIENMS19aRVJPCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lIENMS19UUkFJTAkJCSgweGZmIDw8 IDI0KQorCisjZGVmaW5lIERTSV9QSFlfVElNRUNPTjMJMHgxMWMKKyNkZWZpbmUgQ0xLX0hTX1BS UFIJCQkoMHhmZiA8PCAwKQorI2RlZmluZSBDTEtfSFNfUE9TVAkJCSgweGZmIDw8IDgpCisjZGVm aW5lIENMS19IU19FWElUCQkJKDB4ZmYgPDwgMTYpCisKKyNkZWZpbmUgTlNfVE9fQ1lDTEUobiwg YykgICAgKChuKSAvIChjKSArICgoKG4pICUgKGMpKSA/IDEgOiAwKSkKKworc3RydWN0IHBoeTsK Kworc3RydWN0IG10a19kc2kgeworCXN0cnVjdCBtdGtfZGRwX2NvbXAgZGRwX2NvbXA7CisJc3Ry dWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBtaXBpX2RzaV9ob3N0IGhvc3Q7CisJc3RydWN0IGRy bV9lbmNvZGVyIGVuY29kZXI7CisJc3RydWN0IGRybV9jb25uZWN0b3IgY29ubjsKKwlzdHJ1Y3Qg ZHJtX3BhbmVsICpwYW5lbDsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlOworCXN0cnVjdCBw aHkgKnBoeTsKKworCXZvaWQgX19pb21lbSAqcmVnczsKKworCXN0cnVjdCBjbGsgKmVuZ2luZV9j bGs7CisJc3RydWN0IGNsayAqZGlnaXRhbF9jbGs7CisJc3RydWN0IGNsayAqaHNfY2xrOworCisJ dTMyIGRhdGFfcmF0ZTsKKworCXVuc2lnbmVkIGxvbmcgbW9kZV9mbGFnczsKKwllbnVtIG1pcGlf ZHNpX3BpeGVsX2Zvcm1hdCBmb3JtYXQ7CisJdW5zaWduZWQgaW50IGxhbmVzOworCXN0cnVjdCB2 aWRlb21vZGUgdm07CisJaW50IHJlZmNvdW50OworCWJvb2wgZW5hYmxlZDsKK307CisKK3N0YXRp YyBpbmxpbmUgc3RydWN0IG10a19kc2kgKmVuY29kZXJfdG9fZHNpKHN0cnVjdCBkcm1fZW5jb2Rl ciAqZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGUsIHN0cnVjdCBtdGtfZHNpLCBlbmNvZGVy KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX2RzaSAqY29ubmVjdG9yX3RvX2RzaShz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqYykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGMsIHN0cnVj dCBtdGtfZHNpLCBjb25uKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX2RzaSAqaG9z dF90b19kc2koc3RydWN0IG1pcGlfZHNpX2hvc3QgKmgpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9v ZihoLCBzdHJ1Y3QgbXRrX2RzaSwgaG9zdCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfbWFz ayhzdHJ1Y3QgbXRrX2RzaSAqZHNpLCB1MzIgb2Zmc2V0LCB1MzIgbWFzaywgdTMyIGRhdGEpCit7 CisJdTMyIHRlbXAgPSByZWFkbChkc2ktPnJlZ3MgKyBvZmZzZXQpOworCisJd3JpdGVsKCh0ZW1w ICYgfm1hc2spIHwgKGRhdGEgJiBtYXNrKSwgZHNpLT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3Rh dGljIHZvaWQgZHNpX3BoeV90aW1jb25maWcoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwl1MzIg dGltY29uMCwgdGltY29uMSwgdGltY29uMiwgdGltY29uMzsKKwl1bnNpZ25lZCBpbnQgdWksIGN5 Y2xlX3RpbWU7CisJdW5zaWduZWQgaW50IGxweDsKKworCXVpID0gMTAwMCAvIGRzaS0+ZGF0YV9y YXRlICsgMHgwMTsKKwljeWNsZV90aW1lID0gODAwMCAvIGRzaS0+ZGF0YV9yYXRlICsgMHgwMTsK KwlscHggPSA1OworCisJdGltY29uMCA9ICg4IDw8IDI0KSB8ICgweGEgPDwgMTYpIHwgKDB4NiA8 PCA4KSB8IGxweDsKKwl0aW1jb24xID0gKDcgPDwgMjQpIHwgKDUgKiBscHggPDwgMTYpIHwgKCgz ICogbHB4KSAvIDIpIDw8IDggfAorCQkgICg0ICogbHB4KTsKKwl0aW1jb24yID0gKChOU19UT19D WUNMRSgweDY0LCBjeWNsZV90aW1lKSArIDB4YSkgPDwgMjQpIHwKKwkJICAoTlNfVE9fQ1lDTEUo MHgxNTAsIGN5Y2xlX3RpbWUpIDw8IDE2KTsKKwl0aW1jb24zID0gKDIgKiBscHgpIDw8IDE2IHwg TlNfVE9fQ1lDTEUoODAgKyA1MiAqIHVpLCBjeWNsZV90aW1lKSA8PCA4IHwKKwkJICAgTlNfVE9f Q1lDTEUoMHg0MCwgY3ljbGVfdGltZSk7CisKKwl3cml0ZWwodGltY29uMCwgZHNpLT5yZWdzICsg RFNJX1BIWV9USU1FQ09OMCk7CisJd3JpdGVsKHRpbWNvbjEsIGRzaS0+cmVncyArIERTSV9QSFlf VElNRUNPTjEpOworCXdyaXRlbCh0aW1jb24yLCBkc2ktPnJlZ3MgKyBEU0lfUEhZX1RJTUVDT04y KTsKKwl3cml0ZWwodGltY29uMywgZHNpLT5yZWdzICsgRFNJX1BIWV9USU1FQ09OMyk7Cit9CisK K3N0YXRpYyB2b2lkIG10a19kc2lfZW5hYmxlKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJbXRr X2RzaV9tYXNrKGRzaSwgRFNJX0NPTl9DVFJMLCBEU0lfRU4sIERTSV9FTik7Cit9CisKK3N0YXRp YyB2b2lkIG10a19kc2lfZGlzYWJsZShzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCW10a19kc2lf bWFzayhkc2ksIERTSV9DT05fQ1RSTCwgRFNJX0VOLCAwKTsKK30KKworc3RhdGljIHZvaWQgbXRr X2RzaV9yZXNldChzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERT SV9DT05fQ1RSTCwgRFNJX1JFU0VULCBEU0lfUkVTRVQpOworCW10a19kc2lfbWFzayhkc2ksIERT SV9DT05fQ1RSTCwgRFNJX1JFU0VULCAwKTsKK30KKworc3RhdGljIGludCBtdGtfZHNpX3Bvd2Vy b24oc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRl djsKKwlpbnQgcmV0OworCisJaWYgKCsrZHNpLT5yZWZjb3VudCAhPSAxKQorCQlyZXR1cm4gMDsK KworCS8qKgorCSAqIGRhdGFfcmF0ZSA9IChwaXhlbF9jbG9jayAvIDEwMDApICogcGl4ZWxfZGlw dGggKiBtaXBpX3JhdGlvOworCSAqIHBpeGVsX2Nsb2NrIHVuaXQgaXMgS2h6LCBkYXRhX3JhdGEg dW5pdCBpcyBNSHosIHNvIG5lZWQgZGl2aWRlIDEwMDAuCisJICogbWlwaV9yYXRpbyBpcyBtaXBp IGNsayBjb2VmZmljaWVudCBmb3IgYmFsYW5jZSB0aGUgcGl4ZWwgY2xrIGluIG1pcGkuCisJICog d2Ugc2V0IG1pcGlfcmF0aW8gaXMgMS4wNS4KKwkgKi8KKwlkc2ktPmRhdGFfcmF0ZSA9IGRzaS0+ dm0ucGl4ZWxjbG9jayAqIDMgKiAyMSAvICgxICogMTAwMCAqIDEwKTsKKworCXJldCA9IGNsa19z ZXRfcmF0ZShkc2ktPmhzX2NsaywgZHNpLT5kYXRhX3JhdGUgKiAxMDAwMDAwKTsKKwlpZiAocmV0 IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBzZXQgZGF0YSByYXRlOiAlZFxuIiwg cmV0KTsKKwkJZ290byBlcnJfcmVmY291bnQ7CisJfQorCisJcGh5X3Bvd2VyX29uKGRzaS0+cGh5 KTsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmVuZ2luZV9jbGspOworCWlmIChy ZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBlbmdpbmUgY2xvY2s6 ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9waHlfcG93ZXJfb2ZmOworCX0KKworCXJldCA9IGNs a19wcmVwYXJlX2VuYWJsZShkc2ktPmRpZ2l0YWxfY2xrKTsKKwlpZiAocmV0IDwgMCkgeworCQlk ZXZfZXJyKGRldiwgIkZhaWxlZCB0byBlbmFibGUgZGlnaXRhbCBjbG9jazogJWRcbiIsIHJldCk7 CisJCWdvdG8gZXJyX2Rpc2FibGVfZW5naW5lX2NsazsKKwl9CisKKwltdGtfZHNpX2VuYWJsZShk c2kpOworCW10a19kc2lfcmVzZXQoZHNpKTsKKwlkc2lfcGh5X3RpbWNvbmZpZyhkc2kpOworCisJ cmV0dXJuIDA7CisKK2Vycl9kaXNhYmxlX2VuZ2luZV9jbGs6CisJY2xrX2Rpc2FibGVfdW5wcmVw YXJlKGRzaS0+ZW5naW5lX2Nsayk7CitlcnJfcGh5X3Bvd2VyX29mZjoKKwlwaHlfcG93ZXJfb2Zm KGRzaS0+cGh5KTsKK2Vycl9yZWZjb3VudDoKKwlkc2ktPnJlZmNvdW50LS07CisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIHZvaWQgZHNpX2Nsa191bHBfbW9kZV9lbnRlcihzdHJ1Y3QgbXRrX2Rz aSAqZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04sIExDX0hTX1RYX0VO LCAwKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xDQ09OLCBMQ19VTFBNX0VOLCAwKTsK K30KKworc3RhdGljIHZvaWQgZHNpX2Nsa191bHBfbW9kZV9sZWF2ZShzdHJ1Y3QgbXRrX2RzaSAq ZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04sIExDX1VMUE1fRU4sIDAp OworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04sIExDX1dBS0VVUF9FTiwgTENfV0FL RVVQX0VOKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xDQ09OLCBMQ19XQUtFVVBfRU4s IDApOworfQorCitzdGF0aWMgdm9pZCBkc2lfbGFuZTBfdWxwX21vZGVfZW50ZXIoc3RydWN0IG10 a19kc2kgKmRzaSkKK3sKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xEMENPTiwgTEQwX0hT X1RYX0VOLCAwKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xEMENPTiwgTEQwX1VMUE1f RU4sIDApOworfQorCitzdGF0aWMgdm9pZCBkc2lfbGFuZTBfdWxwX21vZGVfbGVhdmUoc3RydWN0 IG10a19kc2kgKmRzaSkKK3sKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xEMENPTiwgTEQw X1VMUE1fRU4sIDApOworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTEQwQ09OLCBMRDBfV0FL RVVQX0VOLCBMRDBfV0FLRVVQX0VOKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xEMENP TiwgTEQwX1dBS0VVUF9FTiwgMCk7Cit9CisKK3N0YXRpYyBib29sIGRzaV9jbGtfaHNfc3RhdGUo c3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwl1MzIgdG1wX3JlZzE7CisKKwl0bXBfcmVnMSA9IHJl YWRsKGRzaS0+cmVncyArIERTSV9QSFlfTENDT04pOworCXJldHVybiAoKHRtcF9yZWcxICYgTENf SFNfVFhfRU4pID09IDEpID8gdHJ1ZSA6IGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBkc2lfY2xr X2hzX21vZGUoc3RydWN0IG10a19kc2kgKmRzaSwgYm9vbCBlbnRlcikKK3sKKwlpZiAoZW50ZXIg JiYgIWRzaV9jbGtfaHNfc3RhdGUoZHNpKSkKKwkJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9M Q0NPTiwgTENfSFNfVFhfRU4sIExDX0hTX1RYX0VOKTsKKwllbHNlIGlmICghZW50ZXIgJiYgZHNp X2Nsa19oc19zdGF0ZShkc2kpKQorCQltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xDQ09OLCBM Q19IU19UWF9FTiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9zZXRfbW9kZShzdHJ1Y3QgbXRr X2RzaSAqZHNpKQoreworCXUzMiB2aWRfbW9kZSA9IENNRF9NT0RFOworCisJaWYgKGRzaS0+bW9k ZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU8pIHsKKwkJdmlkX21vZGUgPSBTWU5DX1BVTFNF X01PREU7CisKKwkJaWYgKChkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX0JV UlNUKSAmJgorCQkgICAgIShkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZ TkNfUFVMU0UpKQorCQkJdmlkX21vZGUgPSBCVVJTVF9NT0RFOworCX0KKworCXdyaXRlbCh2aWRf bW9kZSwgZHNpLT5yZWdzICsgRFNJX01PREVfQ1RSTCk7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9w c19jb250cm9sX3ZhY3Qoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlzdHJ1Y3QgdmlkZW9tb2Rl ICp2bSA9ICZkc2ktPnZtOworCXUzMiBkc2lfYnVmX2JwcCwgcHNfd2M7CisJdTMyIHBzX2JwcF9t b2RlOworCisJaWYgKGRzaS0+Zm9ybWF0ID09IE1JUElfRFNJX0ZNVF9SR0I1NjUpCisJCWRzaV9i dWZfYnBwID0gMjsKKwllbHNlCisJCWRzaV9idWZfYnBwID0gMzsKKworCXBzX3djID0gdm0tPmhh Y3RpdmUgKiBkc2lfYnVmX2JwcDsKKwlwc19icHBfbW9kZSA9IHBzX3djOworCisJc3dpdGNoIChk c2ktPmZvcm1hdCkgeworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjg4ODoKKwkJcHNfYnBwX21vZGUg fD0gUEFDS0VEX1BTXzI0QklUX1JHQjg4ODsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRf UkdCNjY2OgorCQlwc19icHBfbW9kZSB8PSBQQUNLRURfUFNfMThCSVRfUkdCNjY2OworCQlicmVh azsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjZfUEFDS0VEOgorCQlwc19icHBfbW9kZSB8PSBM T09TRUxZX1BTXzE4QklUX1JHQjY2NjsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdC NTY1OgorCQlwc19icHBfbW9kZSB8PSBQQUNLRURfUFNfMTZCSVRfUkdCNTY1OworCQlicmVhazsK Kwl9CisKKwl3cml0ZWwodm0tPnZhY3RpdmUsIGRzaS0+cmVncyArIERTSV9WQUNUX05MKTsKKwl3 cml0ZWwocHNfYnBwX21vZGUsIGRzaS0+cmVncyArIERTSV9QU0NUUkwpOworCXdyaXRlbChwc193 YywgZHNpLT5yZWdzICsgRFNJX0hTVFhfQ0tMX1dDKTsKK30KKworc3RhdGljIHZvaWQgZHNpX3J4 dHhfY29udHJvbChzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXUzMiB0bXBfcmVnOworCisJc3dp dGNoIChkc2ktPmxhbmVzKSB7CisJY2FzZSAxOgorCQl0bXBfcmVnID0gMSA8PCAyOworCQlicmVh azsKKwljYXNlIDI6CisJCXRtcF9yZWcgPSAzIDw8IDI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJ dG1wX3JlZyA9IDcgPDwgMjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQl0bXBfcmVnID0gMHhmIDw8 IDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXRtcF9yZWcgPSAweGYgPDwgMjsKKwkJYnJlYWs7 CisJfQorCisJd3JpdGVsKHRtcF9yZWcsIGRzaS0+cmVncyArIERTSV9UWFJYX0NUUkwpOworfQor CitzdGF0aWMgdm9pZCBkc2lfcHNfY29udHJvbChzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXVu c2lnbmVkIGludCBkc2lfdG1wX2J1Zl9icHA7CisJdTMyIHRtcF9yZWc7CisKKwlzd2l0Y2ggKGRz aS0+Zm9ybWF0KSB7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCODg4OgorCQl0bXBfcmVnID0gUEFD S0VEX1BTXzI0QklUX1JHQjg4ODsKKwkJZHNpX3RtcF9idWZfYnBwID0gMzsKKwkJYnJlYWs7CisJ Y2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2OgorCQl0bXBfcmVnID0gTE9PU0VMWV9QU18xOEJJVF9S R0I2NjY7CisJCWRzaV90bXBfYnVmX2JwcCA9IDM7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lf Rk1UX1JHQjY2Nl9QQUNLRUQ6CisJCXRtcF9yZWcgPSBQQUNLRURfUFNfMThCSVRfUkdCNjY2Owor CQlkc2lfdG1wX2J1Zl9icHAgPSAzOworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I1 NjU6CisJCXRtcF9yZWcgPSBQQUNLRURfUFNfMTZCSVRfUkdCNTY1OworCQlkc2lfdG1wX2J1Zl9i cHAgPSAyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl0bXBfcmVnID0gUEFDS0VEX1BTXzI0QklU X1JHQjg4ODsKKwkJZHNpX3RtcF9idWZfYnBwID0gMzsKKwkJYnJlYWs7CisJfQorCisJdG1wX3Jl ZyArPSBkc2ktPnZtLmhhY3RpdmUgKiBkc2lfdG1wX2J1Zl9icHAgJiBEU0lfUFNfV0M7CisJd3Jp dGVsKHRtcF9yZWcsIGRzaS0+cmVncyArIERTSV9QU0NUUkwpOworfQorCitzdGF0aWMgdm9pZCBk c2lfY29uZmlnX3Zkb190aW1pbmcoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwl1bnNpZ25lZCBp bnQgaG9yaXpvbnRhbF9zeW5jX2FjdGl2ZV9ieXRlOworCXVuc2lnbmVkIGludCBob3Jpem9udGFs X2JhY2twb3JjaF9ieXRlOworCXVuc2lnbmVkIGludCBob3Jpem9udGFsX2Zyb250cG9yY2hfYnl0 ZTsKKwl1bnNpZ25lZCBpbnQgZHNpX3RtcF9idWZfYnBwOworCisJc3RydWN0IHZpZGVvbW9kZSAq dm0gPSAmZHNpLT52bTsKKworCWlmIChkc2ktPmZvcm1hdCA9PSBNSVBJX0RTSV9GTVRfUkdCNTY1 KQorCQlkc2lfdG1wX2J1Zl9icHAgPSAyOworCWVsc2UKKwkJZHNpX3RtcF9idWZfYnBwID0gMzsK KworCXdyaXRlbCh2bS0+dnN5bmNfbGVuLCBkc2ktPnJlZ3MgKyBEU0lfVlNBX05MKTsKKwl3cml0 ZWwodm0tPnZiYWNrX3BvcmNoLCBkc2ktPnJlZ3MgKyBEU0lfVkJQX05MKTsKKwl3cml0ZWwodm0t PnZmcm9udF9wb3JjaCwgZHNpLT5yZWdzICsgRFNJX1ZGUF9OTCk7CisJd3JpdGVsKHZtLT52YWN0 aXZlLCBkc2ktPnJlZ3MgKyBEU0lfVkFDVF9OTCk7CisKKwlob3Jpem9udGFsX3N5bmNfYWN0aXZl X2J5dGUgPSAodm0tPmhzeW5jX2xlbiAqIGRzaV90bXBfYnVmX2JwcCAtIDEwKTsKKworCWlmIChk c2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpCisJCWhvcml6 b250YWxfYmFja3BvcmNoX2J5dGUgPQorCQkJKHZtLT5oYmFja19wb3JjaCAqIGRzaV90bXBfYnVm X2JwcCAtIDEwKTsKKwllbHNlCisJCWhvcml6b250YWxfYmFja3BvcmNoX2J5dGUgPSAoKHZtLT5o YmFja19wb3JjaCArIHZtLT5oc3luY19sZW4pICoKKwkJCWRzaV90bXBfYnVmX2JwcCAtIDEwKTsK KworCWhvcml6b250YWxfZnJvbnRwb3JjaF9ieXRlID0gKHZtLT5oZnJvbnRfcG9yY2ggKiBkc2lf dG1wX2J1Zl9icHAgLSAxMik7CisKKwl3cml0ZWwoaG9yaXpvbnRhbF9zeW5jX2FjdGl2ZV9ieXRl LCBkc2ktPnJlZ3MgKyBEU0lfSFNBX1dDKTsKKwl3cml0ZWwoaG9yaXpvbnRhbF9iYWNrcG9yY2hf Ynl0ZSwgZHNpLT5yZWdzICsgRFNJX0hCUF9XQyk7CisJd3JpdGVsKGhvcml6b250YWxfZnJvbnRw b3JjaF9ieXRlLCBkc2ktPnJlZ3MgKyBEU0lfSEZQX1dDKTsKKworCWRzaV9wc19jb250cm9sKGRz aSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfc3RhcnQoc3RydWN0IG10a19kc2kgKmRzaSkK K3sKKwl3cml0ZWwoMCwgZHNpLT5yZWdzICsgRFNJX1NUQVJUKTsKKwl3cml0ZWwoMSwgZHNpLT5y ZWdzICsgRFNJX1NUQVJUKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9wb3dlcm9mZihzdHJ1 Y3QgbXRrX2RzaSAqZHNpKQoreworCWlmIChXQVJOX09OKGRzaS0+cmVmY291bnQgPT0gMCkpCisJ CXJldHVybjsKKworCWlmICgtLWRzaS0+cmVmY291bnQgIT0gMCkKKwkJcmV0dXJuOworCisJZHNp X2xhbmUwX3VscF9tb2RlX2VudGVyKGRzaSk7CisJZHNpX2Nsa191bHBfbW9kZV9lbnRlcihkc2kp OworCisJbXRrX2RzaV9kaXNhYmxlKGRzaSk7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNp LT5lbmdpbmVfY2xrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5kaWdpdGFsX2Nsayk7 CisKKwlwaHlfcG93ZXJfb2ZmKGRzaS0+cGh5KTsKK30KKworc3RhdGljIHZvaWQgbXRrX291dHB1 dF9kc2lfZW5hYmxlKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJaW50IHJldDsKKworCWlmIChk c2ktPmVuYWJsZWQpCisJCXJldHVybjsKKworCWlmIChkc2ktPnBhbmVsKSB7CisJCWlmIChkcm1f cGFuZWxfcHJlcGFyZShkc2ktPnBhbmVsKSkgeworCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gc2V0 dXAgdGhlIHBhbmVsXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCXJldCA9IG10a19kc2lf cG93ZXJvbihkc2kpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBv d2VyIG9uIGRzaVxuIik7CisJCXJldHVybjsKKwl9CisKKwlkc2lfcnh0eF9jb250cm9sKGRzaSk7 CisKKwlkc2lfY2xrX3VscF9tb2RlX2xlYXZlKGRzaSk7CisJZHNpX2xhbmUwX3VscF9tb2RlX2xl YXZlKGRzaSk7CisJZHNpX2Nsa19oc19tb2RlKGRzaSwgMCk7CisJZHNpX3NldF9tb2RlKGRzaSk7 CisKKwlkc2lfcHNfY29udHJvbF92YWN0KGRzaSk7CisJZHNpX2NvbmZpZ192ZG9fdGltaW5nKGRz aSk7CisKKwlkc2lfc2V0X21vZGUoZHNpKTsKKwlkc2lfY2xrX2hzX21vZGUoZHNpLCAxKTsKKwor CW10a19kc2lfc3RhcnQoZHNpKTsKKworCWRzaS0+ZW5hYmxlZCA9IHRydWU7Cit9CisKK3N0YXRp YyB2b2lkIG10a19vdXRwdXRfZHNpX2Rpc2FibGUoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlp ZiAoIWRzaS0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWYgKGRzaS0+cGFuZWwpIHsKKwkJaWYg KGRybV9wYW5lbF9kaXNhYmxlKGRzaS0+cGFuZWwpKSB7CisJCQlEUk1fRVJST1IoImZhaWxlZCB0 byBkaXNhYmxlIHRoZSBwYW5lbFxuIik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwltdGtfZHNp X3Bvd2Vyb2ZmKGRzaSk7CisKKwlkc2ktPmVuYWJsZWQgPSBmYWxzZTsKK30KKworc3RhdGljIHZv aWQgbXRrX2RzaV9lbmNvZGVyX2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQor eworCWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2VuY29kZXJfZnVuY3MgbXRrX2RzaV9lbmNvZGVyX2Z1bmNzID0geworCS5kZXN0cm95 ID0gbXRrX2RzaV9lbmNvZGVyX2Rlc3Ryb3ksCit9OworCitzdGF0aWMgYm9vbCBtdGtfZHNpX2Vu Y29kZXJfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICAgICAg IGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSAgICAgICBzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKwor c3RhdGljIHZvaWQgbXRrX2RzaV9lbmNvZGVyX21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAq ZW5jb2RlciwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSAg ICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkKQoreworCXN0cnVjdCBtdGtfZHNp ICpkc2kgPSBlbmNvZGVyX3RvX2RzaShlbmNvZGVyKTsKKworCWRzaS0+dm0ucGl4ZWxjbG9jayA9 IGFkanVzdGVkLT5jbG9jazsKKwlkc2ktPnZtLmhhY3RpdmUgPSBhZGp1c3RlZC0+aGRpc3BsYXk7 CisJZHNpLT52bS5oYmFja19wb3JjaCA9IGFkanVzdGVkLT5odG90YWwgLSBhZGp1c3RlZC0+aHN5 bmNfZW5kOworCWRzaS0+dm0uaGZyb250X3BvcmNoID0gYWRqdXN0ZWQtPmhzeW5jX3N0YXJ0IC0g YWRqdXN0ZWQtPmhkaXNwbGF5OworCWRzaS0+dm0uaHN5bmNfbGVuID0gYWRqdXN0ZWQtPmhzeW5j X2VuZCAtIGFkanVzdGVkLT5oc3luY19zdGFydDsKKworCWRzaS0+dm0udmFjdGl2ZSA9IGFkanVz dGVkLT52ZGlzcGxheTsKKwlkc2ktPnZtLnZiYWNrX3BvcmNoID0gYWRqdXN0ZWQtPnZ0b3RhbCAt IGFkanVzdGVkLT52c3luY19lbmQ7CisJZHNpLT52bS52ZnJvbnRfcG9yY2ggPSBhZGp1c3RlZC0+ dnN5bmNfc3RhcnQgLSBhZGp1c3RlZC0+dmRpc3BsYXk7CisJZHNpLT52bS52c3luY19sZW4gPSBh ZGp1c3RlZC0+dnN5bmNfZW5kIC0gYWRqdXN0ZWQtPnZzeW5jX3N0YXJ0OworfQorCitzdGF0aWMg dm9pZCBtdGtfZHNpX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIp Cit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGVuY29kZXJfdG9fZHNpKGVuY29kZXIpOworCisJ bXRrX291dHB1dF9kc2lfZGlzYWJsZShkc2kpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX2Vu Y29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgbXRr X2RzaSAqZHNpID0gZW5jb2Rlcl90b19kc2koZW5jb2Rlcik7CisKKwltdGtfb3V0cHV0X2RzaV9l bmFibGUoZHNpKTsKK30KKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgbXRrX2Rz aV9jb25uZWN0b3JfZGV0ZWN0KAorCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJv b2wgZm9yY2UpCit7CisJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworfQorCitz dGF0aWMgdm9pZCBtdGtfZHNpX2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IpCit7CisJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKGNvbm5lY3Rvcik7CisJ ZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2Rz aV9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7 CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGNvbm5lY3Rvcl90b19kc2koY29ubmVjdG9yKTsKKwor CXJldHVybiBkcm1fcGFuZWxfZ2V0X21vZGVzKGRzaS0+cGFuZWwpOworfQorCitzdGF0aWMgc3Ry dWN0IGRybV9lbmNvZGVyICptdGtfZHNpX2Nvbm5lY3Rvcl9iZXN0X2VuY29kZXIoCisJCXN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGNv bm5lY3Rvcl90b19kc2koY29ubmVjdG9yKTsKKworCXJldHVybiAmZHNpLT5lbmNvZGVyOworfQor CitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyBtdGtfZHNpX2Vu Y29kZXJfaGVscGVyX2Z1bmNzID0geworCS5tb2RlX2ZpeHVwID0gbXRrX2RzaV9lbmNvZGVyX21v ZGVfZml4dXAsCisJLm1vZGVfc2V0ID0gbXRrX2RzaV9lbmNvZGVyX21vZGVfc2V0LAorCS5kaXNh YmxlID0gbXRrX2RzaV9lbmNvZGVyX2Rpc2FibGUsCisJLmVuYWJsZSA9IG10a19kc2lfZW5jb2Rl cl9lbmFibGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3Mg bXRrX2RzaV9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRwbXMgPSBkcm1fYXRvbWljX2hlbHBlcl9j b25uZWN0b3JfZHBtcywKKwkuZGV0ZWN0ID0gbXRrX2RzaV9jb25uZWN0b3JfZGV0ZWN0LAorCS5m aWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5k ZXN0cm95ID0gbXRrX2RzaV9jb25uZWN0b3JfZGVzdHJveSwKKwkucmVzZXQgPSBkcm1fYXRvbWlj X2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1f YXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJv eV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLAorfTsK Kworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcworCW10a19k c2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0X21vZGVzID0gbXRrX2RzaV9jb25u ZWN0b3JfZ2V0X21vZGVzLAorCS5iZXN0X2VuY29kZXIgPSBtdGtfZHNpX2Nvbm5lY3Rvcl9iZXN0 X2VuY29kZXIsCit9OworCitzdGF0aWMgaW50IG10a19kcm1fYXR0YWNoX2JyaWRnZShzdHJ1Y3Qg ZHJtX2JyaWRnZSAqYnJpZGdlLAorCQkJCSBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7 CisJaW50IHJldDsKKworCWlmICghYnJpZGdlKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWVuY29k ZXItPmJyaWRnZSA9IGJyaWRnZTsKKwlicmlkZ2UtPmVuY29kZXIgPSBlbmNvZGVyOworCXJldCA9 IGRybV9icmlkZ2VfYXR0YWNoKGVuY29kZXItPmRldiwgYnJpZGdlKTsKKwlpZiAocmV0KSB7CisJ CURSTV9FUlJPUigiRmFpbGVkIHRvIGF0dGFjaCBicmlkZ2UgdG8gZHJtXG4iKTsKKwkJZW5jb2Rl ci0+YnJpZGdlID0gTlVMTDsKKwkJYnJpZGdlLT5lbmNvZGVyID0gTlVMTDsKKwl9CisKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19kc2lfY3JlYXRlX2Nvbm5fZW5jKHN0cnVjdCBk cm1fZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJaW50IHJldDsKKworCXJl dCA9IGRybV9lbmNvZGVyX2luaXQoZHJtLCAmZHNpLT5lbmNvZGVyLCAmbXRrX2RzaV9lbmNvZGVy X2Z1bmNzLAorCQkJICAgICAgIERSTV9NT0RFX0VOQ09ERVJfRFNJLCBOVUxMKTsKKwlpZiAocmV0 KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuY29kZXIgaW5pdCB0byBkcm1cbiIpOworCQly ZXR1cm4gcmV0OworCX0KKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKCZkc2ktPmVuY29kZXIsICZt dGtfZHNpX2VuY29kZXJfaGVscGVyX2Z1bmNzKTsKKworCS8qCisJICogQ3VycmVudGx5IGRpc3Bs YXkgZGF0YSBwYXRocyBhcmUgc3RhdGljYWxseSBhc3NpZ25lZCB0byBhIGNydGMgZWFjaC4KKwkg KiBjcnRjIDAgaXMgT1ZMMCAtPiBDT0xPUjAgLT4gQUFMIC0+IE9EIC0+IFJETUEwIC0+IFVGT0Ug LT4gRFNJMAorCSAqLworCWRzaS0+ZW5jb2Rlci5wb3NzaWJsZV9jcnRjcyA9IDE7CisKKwkvKiBQ cmUtZW1wdCBEUCBjb25uZWN0b3IgY3JlYXRpb24gaWYgdGhlcmUncyBhIGJyaWRnZSAqLworCXJl dCA9IG10a19kcm1fYXR0YWNoX2JyaWRnZShkc2ktPmJyaWRnZSwgJmRzaS0+ZW5jb2Rlcik7CisJ aWYgKCFyZXQpCisJCXJldHVybiAwOworCisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9pbml0KGRybSwg JmRzaS0+Y29ubiwgJm10a19kc2lfY29ubmVjdG9yX2Z1bmNzLAorCQkJCSBEUk1fTU9ERV9DT05O RUNUT1JfRFNJKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGNvbm5lY3Rv ciBpbml0IHRvIGRybVxuIik7CisJCWdvdG8gZXJyX2VuY29kZXJfY2xlYW51cDsKKwl9CisKKwlk cm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJmRzaS0+Y29ubiwgJm10a19kc2lfY29ubmVjdG9yX2hl bHBlcl9mdW5jcyk7CisKKwlyZXQgPSBkcm1fY29ubmVjdG9yX3JlZ2lzdGVyKCZkc2ktPmNvbm4p OworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY29ubmVjdG9yIHJlZ2lzdGVy IHRvIGRybVxuIik7CisJCWdvdG8gZXJyX2Nvbm5lY3Rvcl9jbGVhbnVwOworCX0KKworCWRzaS0+ Y29ubi5kcG1zID0gRFJNX01PREVfRFBNU19PRkY7CisJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFj aF9lbmNvZGVyKCZkc2ktPmNvbm4sICZkc2ktPmVuY29kZXIpOworCisJaWYgKGRzaS0+cGFuZWwp IHsKKwkJcmV0ID0gZHJtX3BhbmVsX2F0dGFjaChkc2ktPnBhbmVsLCAmZHNpLT5jb25uKTsKKwkJ aWYgKHJldCkgeworCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYXR0YWNoIHBhbmVsIHRvIGRybVxu Iik7CisJCQlnb3RvIGVycl9jb25uZWN0b3JfdW5yZWdpc3RlcjsKKwkJfQorCX0KKwlyZXR1cm4g MDsKKworZXJyX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyOgorCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rl cigmZHNpLT5jb25uKTsKK2Vycl9jb25uZWN0b3JfY2xlYW51cDoKKwlkcm1fY29ubmVjdG9yX2Ns ZWFudXAoJmRzaS0+Y29ubik7CitlcnJfZW5jb2Rlcl9jbGVhbnVwOgorCWRybV9lbmNvZGVyX2Ns ZWFudXAoJmRzaS0+ZW5jb2Rlcik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBt dGtfZHNpX2Rlc3Ryb3lfY29ubl9lbmMoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlkcm1fZW5j b2Rlcl9jbGVhbnVwKCZkc2ktPmVuY29kZXIpOworCS8qIFNraXAgY29ubmVjdG9yIGNsZWFudXAg aWYgY3JlYXRpb24gd2FzIGRlbGVnYXRlZCB0byB0aGUgYnJpZGdlICovCisJaWYgKGRzaS0+Y29u bi5kZXYpIHsKKwkJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKCZkc2ktPmNvbm4pOworCQlkcm1f Y29ubmVjdG9yX2NsZWFudXAoJmRzaS0+Y29ubik7CisJfQorfQorCitzdGF0aWMgdm9pZCBtdGtf ZHNpX2RkcF9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXN0cnVjdCBtdGtf ZHNpICpkc2kgPSBjb250YWluZXJfb2YoY29tcCwgc3RydWN0IG10a19kc2ksIGRkcF9jb21wKTsK KworCW10a19kc2lfcG93ZXJvbihkc2kpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX2RkcF9z dG9wKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9 IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3QgbXRrX2RzaSwgZGRwX2NvbXApOworCisJbXRrX2Rz aV9wb3dlcm9mZihkc2kpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9m dW5jcyBtdGtfZHNpX2Z1bmNzID0geworCS5zdGFydCA9IG10a19kc2lfZGRwX3N0YXJ0LAorCS5z dG9wID0gbXRrX2RzaV9kZHBfc3RvcCwKK307CisKK3N0YXRpYyBpbnQgbXRrX2RzaV9ob3N0X2F0 dGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCSAgICAgICBzdHJ1Y3QgbWlwaV9k c2lfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGhvc3RfdG9fZHNp KGhvc3QpOworCisJZHNpLT5sYW5lcyA9IGRldmljZS0+bGFuZXM7CisJZHNpLT5mb3JtYXQgPSBk ZXZpY2UtPmZvcm1hdDsKKwlkc2ktPm1vZGVfZmxhZ3MgPSBkZXZpY2UtPm1vZGVfZmxhZ3M7CisK KwlpZiAoZHNpLT5jb25uLmRldikKKwkJZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KGRzaS0+Y29u bi5kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RzaV9ob3N0X2RldGFj aChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCSAgICAgICBzdHJ1Y3QgbWlwaV9kc2lf ZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGhvc3RfdG9fZHNpKGhv c3QpOworCisJaWYgKGRzaS0+Y29ubi5kZXYpCisJCWRybV9oZWxwZXJfaHBkX2lycV9ldmVudChk c2ktPmNvbm4uZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG1p cGlfZHNpX2hvc3Rfb3BzIG10a19kc2lfb3BzID0geworCS5hdHRhY2ggPSBtdGtfZHNpX2hvc3Rf YXR0YWNoLAorCS5kZXRhY2ggPSBtdGtfZHNpX2hvc3RfZGV0YWNoLAorfTsKKworc3RhdGljIGlu dCBtdGtfZHNpX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIs IHZvaWQgKmRhdGEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGF0 YTsKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXQg PSBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoZHJtLCAmZHNpLT5kZHBfY29tcCk7CisJaWYgKHJldCA8 IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29tcG9uZW50ICVzOiAl ZFxuIiwKKwkJCWRldi0+b2Zfbm9kZS0+ZnVsbF9uYW1lLCByZXQpOworCQlyZXR1cm4gcmV0Owor CX0KKworCXJldCA9IG1pcGlfZHNpX2hvc3RfcmVnaXN0ZXIoJmRzaS0+aG9zdCk7CisJaWYgKHJl dCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgRFNJIGhvc3Q6ICVk XG4iLCByZXQpOworCQlnb3RvIGVycl9kZHBfY29tcF91bnJlZ2lzdGVyOworCX0KKworCXJldCA9 IG10a19kc2lfY3JlYXRlX2Nvbm5fZW5jKGRybSwgZHNpKTsKKwlpZiAocmV0KSB7CisJCURSTV9F UlJPUigiRW5jb2RlciBjcmVhdGUgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CisJCWdvdG8gZXJy X3VucmVnaXN0ZXI7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl91bnJlZ2lzdGVyOgorCW1pcGlf ZHNpX2hvc3RfdW5yZWdpc3RlcigmZHNpLT5ob3N0KTsKK2Vycl9kZHBfY29tcF91bnJlZ2lzdGVy OgorCW10a19kZHBfY29tcF91bnJlZ2lzdGVyKGRybSwgJmRzaS0+ZGRwX2NvbXApOworCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRl diwgc3RydWN0IGRldmljZSAqbWFzdGVyLAorCQkJICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtID0gZGF0YTsKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gZGV2X2dldF9k cnZkYXRhKGRldik7CisKKwltdGtfZHNpX2Rlc3Ryb3lfY29ubl9lbmMoZHNpKTsKKwltaXBpX2Rz aV9ob3N0X3VucmVnaXN0ZXIoJmRzaS0+aG9zdCk7CisJbXRrX2RkcF9jb21wX3VucmVnaXN0ZXIo ZHJtLCAmZHNpLT5kZHBfY29tcCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50 X29wcyBtdGtfZHNpX2NvbXBvbmVudF9vcHMgPSB7CisJLmJpbmQgPSBtdGtfZHNpX2JpbmQsCisJ LnVuYmluZCA9IG10a19kc2lfdW5iaW5kLAorfTsKKworc3RhdGljIGludCBtdGtfZHNpX3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10a19kc2kgKmRzaTsK KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAq cmVtb3RlX25vZGUsICplbmRwb2ludDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ3M7CisJaW50IGNv bXBfaWQ7CisJaW50IHJldDsKKworCWRzaSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZHNp KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkc2kpCisJCXJldHVybiAtRU5PTUVNOworCisJZHNpLT5o b3N0Lm9wcyA9ICZtdGtfZHNpX29wczsKKwlkc2ktPmhvc3QuZGV2ID0gZGV2OworCisJZW5kcG9p bnQgPSBvZl9ncmFwaF9nZXRfbmV4dF9lbmRwb2ludChkZXYtPm9mX25vZGUsIE5VTEwpOworCWlm IChlbmRwb2ludCkgeworCQlyZW1vdGVfbm9kZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9w YXJlbnQoZW5kcG9pbnQpOworCQlpZiAoIXJlbW90ZV9ub2RlKSB7CisJCQlkZXZfZXJyKGRldiwg Ik5vIHBhbmVsIGNvbm5lY3RlZFxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCWRz aS0+YnJpZGdlID0gb2ZfZHJtX2ZpbmRfYnJpZGdlKHJlbW90ZV9ub2RlKTsKKwkJZHNpLT5wYW5l bCA9IG9mX2RybV9maW5kX3BhbmVsKHJlbW90ZV9ub2RlKTsKKwkJb2Zfbm9kZV9wdXQocmVtb3Rl X25vZGUpOworCQlpZiAoIWRzaS0+YnJpZGdlICYmICFkc2ktPnBhbmVsKSB7CisJCQlkZXZfaW5m byhkZXYsICJXYWl0aW5nIGZvciBicmlkZ2Ugb3IgcGFuZWwgZHJpdmVyXG4iKTsKKwkJCXJldHVy biAtRVBST0JFX0RFRkVSOworCQl9CisJfQorCisJZHNpLT5lbmdpbmVfY2xrID0gZGV2bV9jbGtf Z2V0KGRldiwgImVuZ2luZSIpOworCWlmIChJU19FUlIoZHNpLT5lbmdpbmVfY2xrKSkgeworCQly ZXQgPSBQVFJfRVJSKGRzaS0+ZW5naW5lX2Nsayk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRv IGdldCBlbmdpbmUgY2xvY2s6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRz aS0+ZGlnaXRhbF9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiZGlnaXRhbCIpOworCWlmIChJU19F UlIoZHNpLT5kaWdpdGFsX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2ktPmRpZ2l0YWxfY2xr KTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGRpZ2l0YWwgY2xvY2s6ICVkXG4iLCBy ZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRzaS0+aHNfY2xrID0gZGV2bV9jbGtfZ2V0KGRl diwgImhzIik7CisJaWYgKElTX0VSUihkc2ktPmhzX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihk c2ktPmhzX2Nsayk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBocyBjbG9jazogJWRc biIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNv dXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJZHNpLT5yZWdzID0gZGV2bV9pb3JlbWFw X3Jlc291cmNlKGRldiwgcmVncyk7CisJaWYgKElTX0VSUihkc2ktPnJlZ3MpKSB7CisJCXJldCA9 IFBUUl9FUlIoZHNpLT5yZWdzKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW9yZW1hcCBt ZW1vcnk6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRzaS0+cGh5ID0gZGV2 bV9waHlfZ2V0KGRldiwgImRwaHkiKTsKKwlpZiAoSVNfRVJSKGRzaS0+cGh5KSkgeworCQlyZXQg PSBQVFJfRVJSKGRzaS0+cGh5KTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IE1JUEkt RFBIWTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJY29tcF9pZCA9IG10a19k ZHBfY29tcF9nZXRfaWQoZGV2LT5vZl9ub2RlLCBNVEtfRFNJKTsKKwlpZiAoY29tcF9pZCA8IDAp IHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaWRlbnRpZnkgYnkgYWxpYXM6ICVkXG4iLCBj b21wX2lkKTsKKwkJcmV0dXJuIGNvbXBfaWQ7CisJfQorCisJcmV0ID0gbXRrX2RkcF9jb21wX2lu aXQoZGV2LCBkZXYtPm9mX25vZGUsICZkc2ktPmRkcF9jb21wLCBjb21wX2lkLAorCQkJCSZtdGtf ZHNpX2Z1bmNzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRp YWxpemUgY29tcG9uZW50OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwbGF0 Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkc2kpOworCisJcmV0dXJuIGNvbXBvbmVudF9hZGQoJnBk ZXYtPmRldiwgJm10a19kc2lfY29tcG9uZW50X29wcyk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2Rz aV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXRrX2Rz aSAqZHNpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwltdGtfb3V0cHV0X2RzaV9k aXNhYmxlKGRzaSk7CisJY29tcG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmbXRrX2RzaV9jb21wb25l bnRfb3BzKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50 IG10a19kc2lfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19kc2kg KmRzaTsKKworCWRzaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJbXRrX291dHB1dF9kc2lf ZGlzYWJsZShkc2kpOworCURSTV9ERUJVR19EUklWRVIoImRzaSBzdXNwZW5kIHN1Y2Nlc3MhXG4i KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19kc2lfcmVzdW1lKHN0cnVjdCBk ZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpOworCisJZHNpID0gZGV2X2dldF9k cnZkYXRhKGRldik7CisKKwltdGtfb3V0cHV0X2RzaV9lbmFibGUoZHNpKTsKKwlEUk1fREVCVUdf RFJJVkVSKCJkc2kgcmVzdW1lIHN1Y2Nlc3MhXG4iKTsKKworCXJldHVybiAwOworfQorI2VuZGlm CitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMobXRrX2RzaV9wbV9vcHMsIG10a19kc2lfc3VzcGVu ZCwgbXRrX2RzaV9yZXN1bWUpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBt dGtfZHNpX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMt ZHNpIiB9LAorCXsgfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RzaV9kcml2 ZXIgPSB7CisJLnByb2JlID0gbXRrX2RzaV9wcm9iZSwKKwkucmVtb3ZlID0gbXRrX2RzaV9yZW1v dmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibXRrLWRzaSIsCisJCS5vZl9tYXRjaF90YWJs ZSA9IG10a19kc2lfb2ZfbWF0Y2gsCisJCS5wbSA9ICZtdGtfZHNpX3BtX29wcywKKwl9LAorfTsK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbWlwaV90eC5jIGIvZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19taXBpX3R4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uYjFlOGUzNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfbWlwaV90eC5jCkBAIC0wLDAgKzEsNDg3IEBACisvKgorICogQ29weXJp Z2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIg YXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1 ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5j bHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxs aW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+CisKKyNk ZWZpbmUgTUlQSVRYX0RTSV9DT04JCTB4MDAKKyNkZWZpbmUgUkdfRFNJX0xET0NPUkVfRU4JCUJJ VCgwKQorI2RlZmluZSBSR19EU0lfQ0tHX0xET09VVF9FTgkJQklUKDEpCisjZGVmaW5lIFJHX0RT SV9CQ0xLX1NFTAkJCSgzIDw8IDIpCisjZGVmaW5lIFJHX0RTSV9MRF9JRFhfU0VMCQkoNyA8PCA0 KQorI2RlZmluZSBSR19EU0lfUEhZQ0xLX1NFTAkJKDIgPDwgOCkKKyNkZWZpbmUgUkdfRFNJX0RT SUNMS19GUkVRX1NFTAkJQklUKDEwKQorI2RlZmluZSBSR19EU0lfTFBUWF9DTE1QX0VOCQlCSVQo MTEpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9DTE9DS19MQU5FCTB4MDQKKyNkZWZpbmUgUkdfRFNJ X0xOVENfTERPT1VUX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX0xOVENfQ0tMQU5FX0VOCQlC SVQoMSkKKyNkZWZpbmUgUkdfRFNJX0xOVENfTFBUWF9JUExVUzEJCUJJVCgyKQorI2RlZmluZSBS R19EU0lfTE5UQ19MUFRYX0lQTFVTMgkJQklUKDMpCisjZGVmaW5lIFJHX0RTSV9MTlRDX0xQVFhf SU1JTlVTCQlCSVQoNCkKKyNkZWZpbmUgUkdfRFNJX0xOVENfTFBDRF9JUExVUwkJQklUKDUpCisj ZGVmaW5lIFJHX0RTSV9MTlRDX0xQQ0RfSU1MVVMJCUJJVCg2KQorI2RlZmluZSBSR19EU0lfTE5U Q19SVF9DT0RFCQkoMHhmIDw8IDgpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9EQVRBX0xBTkUwCTB4 MDgKKyNkZWZpbmUgUkdfRFNJX0xOVDBfTERPT1VUX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJ X0xOVDBfQ0tMQU5FX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0xOVDBfTFBUWF9JUExVUzEJ CUJJVCgyKQorI2RlZmluZSBSR19EU0lfTE5UMF9MUFRYX0lQTFVTMgkJQklUKDMpCisjZGVmaW5l IFJHX0RTSV9MTlQwX0xQVFhfSU1JTlVTCQlCSVQoNCkKKyNkZWZpbmUgUkdfRFNJX0xOVDBfTFBD RF9JUExVUwkJQklUKDUpCisjZGVmaW5lIFJHX0RTSV9MTlQwX0xQQ0RfSU1JTlVTCQlCSVQoNikK KyNkZWZpbmUgUkdfRFNJX0xOVDBfUlRfQ09ERQkJKDB4ZiA8PCA4KQorCisjZGVmaW5lIE1JUElU WF9EU0lfREFUQV9MQU5FMQkweDBjCisjZGVmaW5lIFJHX0RTSV9MTlQxX0xET09VVF9FTgkJQklU KDApCisjZGVmaW5lIFJHX0RTSV9MTlQxX0NLTEFORV9FTgkJQklUKDEpCisjZGVmaW5lIFJHX0RT SV9MTlQxX0xQVFhfSVBMVVMxCQlCSVQoMikKKyNkZWZpbmUgUkdfRFNJX0xOVDFfTFBUWF9JUExV UzIJCUJJVCgzKQorI2RlZmluZSBSR19EU0lfTE5UMV9MUFRYX0lNSU5VUwkJQklUKDQpCisjZGVm aW5lIFJHX0RTSV9MTlQxX0xQQ0RfSVBMVVMJCUJJVCg1KQorI2RlZmluZSBSR19EU0lfTE5UMV9M UENEX0lNSU5VUwkJQklUKDYpCisjZGVmaW5lIFJHX0RTSV9MTlQxX1JUX0NPREUJCSgweGYgPDwg OCkKKworI2RlZmluZSBNSVBJVFhfRFNJX0RBVEFfTEFORTIJMHgxMAorI2RlZmluZSBSR19EU0lf TE5UMl9MRE9PVVRfRU4JCUJJVCgwKQorI2RlZmluZSBSR19EU0lfTE5UMl9DS0xBTkVfRU4JCUJJ VCgxKQorI2RlZmluZSBSR19EU0lfTE5UMl9MUFRYX0lQTFVTMQkJQklUKDIpCisjZGVmaW5lIFJH X0RTSV9MTlQyX0xQVFhfSVBMVVMyCQlCSVQoMykKKyNkZWZpbmUgUkdfRFNJX0xOVDJfTFBUWF9J TUlOVVMJCUJJVCg0KQorI2RlZmluZSBSR19EU0lfTE5UMl9MUENEX0lQTFVTCQlCSVQoNSkKKyNk ZWZpbmUgUkdfRFNJX0xOVDJfTFBDRF9JTUlOVVMJCUJJVCg2KQorI2RlZmluZSBSR19EU0lfTE5U Ml9SVF9DT0RFCQkoMHhmIDw8IDgpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9EQVRBX0xBTkUzCTB4 MTQKKyNkZWZpbmUgUkdfRFNJX0xOVDNfTERPT1VUX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJ X0xOVDNfQ0tMQU5FX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0xOVDNfTFBUWF9JUExVUzEJ CUJJVCgyKQorI2RlZmluZSBSR19EU0lfTE5UM19MUFRYX0lQTFVTMgkJQklUKDMpCisjZGVmaW5l IFJHX0RTSV9MTlQzX0xQVFhfSU1JTlVTCQlCSVQoNCkKKyNkZWZpbmUgUkdfRFNJX0xOVDNfTFBD RF9JUExVUwkJQklUKDUpCisjZGVmaW5lIFJHX0RTSV9MTlQzX0xQQ0RfSU1JTlVTCQlCSVQoNikK KyNkZWZpbmUgUkdfRFNJX0xOVDNfUlRfQ09ERQkJKDB4ZiA8PCA4KQorCisjZGVmaW5lIE1JUElU WF9EU0lfVE9QX0NPTgkweDQwCisjZGVmaW5lIFJHX0RTSV9MTlRfSU5UUl9FTgkJQklUKDApCisj ZGVmaW5lIFJHX0RTSV9MTlRfSFNfQklBU19FTgkJQklUKDEpCisjZGVmaW5lIFJHX0RTSV9MTlRf SU1QX0NBTF9FTgkJQklUKDIpCisjZGVmaW5lIFJHX0RTSV9MTlRfVEVTVE1PREVfRU4JCUJJVCgz KQorI2RlZmluZSBSR19EU0lfTE5UX0lNUF9DQUxfQ09ERQkJKDB4ZiA8PCA0KQorI2RlZmluZSBS R19EU0lfTE5UX0FJT19TRUwJCSg3IDw8IDgpCisjZGVmaW5lIFJHX0RTSV9QQURfVElFX0xPV19F TgkJQklUKDExKQorI2RlZmluZSBSR19EU0lfREVCVUdfSU5QVVRfRU4JCUJJVCgxMikKKyNkZWZp bmUgUkdfRFNJX1BSRVNFUlZFCQkJKDcgPDwgMTMpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9CR19D T04JMHg0NAorI2RlZmluZSBSR19EU0lfQkdfQ09SRV9FTgkJQklUKDApCisjZGVmaW5lIFJHX0RT SV9CR19DS0VOCQkJQklUKDEpCisjZGVmaW5lIFJHX0RTSV9CR19ESVYJCQkoMHgzIDw8IDIpCisj ZGVmaW5lIFJHX0RTSV9CR19GQVNUX0NIQVJHRQkJQklUKDQpCisjZGVmaW5lIFJHX0RTSV9WT1VU X01TSwkJCSgweDNmZmZmIDw8IDUpCisjZGVmaW5lIFJHX0RTSV9WMTJfU0VMCQkJKDcgPDwgNSkK KyNkZWZpbmUgUkdfRFNJX1YxMF9TRUwJCQkoNyA8PCA4KQorI2RlZmluZSBSR19EU0lfVjA3Ml9T RUwJCQkoNyA8PCAxMSkKKyNkZWZpbmUgUkdfRFNJX1YwNF9TRUwJCQkoNyA8PCAxNCkKKyNkZWZp bmUgUkdfRFNJX1YwMzJfU0VMCQkJKDcgPDwgMTcpCisjZGVmaW5lIFJHX0RTSV9WMDJfU0VMCQkJ KDcgPDwgMjApCisjZGVmaW5lIFJHX0RTSV9CR19SMV9UUklNCQkoMHhmIDw8IDI0KQorI2RlZmlu ZSBSR19EU0lfQkdfUjJfVFJJTQkJKDB4ZiA8PCAyOCkKKworI2RlZmluZSBNSVBJVFhfRFNJX1BM TF9DT04wCTB4NTAKKyNkZWZpbmUgUkdfRFNJX01QUExMX1BMTF9FTgkJQklUKDApCisjZGVmaW5l IFJHX0RTSV9NUFBMTF9ESVZfTVNLCQkoMHgxZmYgPDwgMSkKKyNkZWZpbmUgUkdfRFNJX01QUExM X1BSRURJVgkJKDMgPDwgMSkKKyNkZWZpbmUgUkdfRFNJX01QUExMX1RYRElWMAkJKDMgPDwgMykK KyNkZWZpbmUgUkdfRFNJX01QUExMX1RYRElWMQkJKDMgPDwgNSkKKyNkZWZpbmUgUkdfRFNJX01Q UExMX1BPU0RJVgkJKDcgPDwgNykKKyNkZWZpbmUgUkdfRFNJX01QUExMX01PTlZDX0VOCQlCSVQo MTApCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9NT05SRUZfRU4JCUJJVCgxMSkKKyNkZWZpbmUgUkdf RFNJX01QUExMX1ZPRF9FTgkJQklUKDEyKQorCisjZGVmaW5lIE1JUElUWF9EU0lfUExMX0NPTjEJ MHg1NAorI2RlZmluZSBSR19EU0lfTVBQTExfU0RNX0ZSQV9FTgkJQklUKDApCisjZGVmaW5lIFJH X0RTSV9NUFBMTF9TRE1fU1NDX1BIX0lOSVQJQklUKDEpCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9T RE1fU1NDX0VOCQlCSVQoMikKKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9TU0NfUFJECSgweGZm ZmYgPDwgMTYpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9QTExfQ09OMgkweDU4CisKKyNkZWZpbmUg TUlQSVRYX0RTSV9QTExfUFdSCTB4NjgKKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9QV1JfT04J CUJJVCgwKQorI2RlZmluZSBSR19EU0lfTVBQTExfU0RNX0lTT19FTgkJQklUKDEpCisjZGVmaW5l IFJHX0RTSV9NUFBMTF9TRE1fUFdSX0FDSwlCSVQoOCkKKworI2RlZmluZSBNSVBJVFhfRFNJX1NX X0NUUkwJMHg4MAorI2RlZmluZSBTV19DVFJMX0VOCQkJQklUKDApCisKKyNkZWZpbmUgTUlQSVRY X0RTSV9TV19DVFJMX0NPTjAJMHg4NAorI2RlZmluZSBTV19MTlRDX0xQVFhfUFJFX09FCQlCSVQo MCkKKyNkZWZpbmUgU1dfTE5UQ19MUFRYX09FCQkJQklUKDEpCisjZGVmaW5lIFNXX0xOVENfTFBU WF9QCQkJQklUKDIpCisjZGVmaW5lIFNXX0xOVENfTFBUWF9OCQkJQklUKDMpCisjZGVmaW5lIFNX X0xOVENfSFNUWF9QUkVfT0UJCUJJVCg0KQorI2RlZmluZSBTV19MTlRDX0hTVFhfT0UJCQlCSVQo NSkKKyNkZWZpbmUgU1dfTE5UQ19IU1RYX1pFUk9DTEsJCUJJVCg2KQorI2RlZmluZSBTV19MTlQw X0xQVFhfUFJFX09FCQlCSVQoNykKKyNkZWZpbmUgU1dfTE5UMF9MUFRYX09FCQkJQklUKDgpCisj ZGVmaW5lIFNXX0xOVDBfTFBUWF9QCQkJQklUKDkpCisjZGVmaW5lIFNXX0xOVDBfTFBUWF9OCQkJ QklUKDEwKQorI2RlZmluZSBTV19MTlQwX0hTVFhfUFJFX09FCQlCSVQoMTEpCisjZGVmaW5lIFNX X0xOVDBfSFNUWF9PRQkJCUJJVCgxMikKKyNkZWZpbmUgU1dfTE5UMF9MUFJYX0VOCQkJQklUKDEz KQorI2RlZmluZSBTV19MTlQxX0xQVFhfUFJFX09FCQlCSVQoMTQpCisjZGVmaW5lIFNXX0xOVDFf TFBUWF9PRQkJCUJJVCgxNSkKKyNkZWZpbmUgU1dfTE5UMV9MUFRYX1AJCQlCSVQoMTYpCisjZGVm aW5lIFNXX0xOVDFfTFBUWF9OCQkJQklUKDE3KQorI2RlZmluZSBTV19MTlQxX0hTVFhfUFJFX09F CQlCSVQoMTgpCisjZGVmaW5lIFNXX0xOVDFfSFNUWF9PRQkJCUJJVCgxOSkKKyNkZWZpbmUgU1df TE5UMl9MUFRYX1BSRV9PRQkJQklUKDIwKQorI2RlZmluZSBTV19MTlQyX0xQVFhfT0UJCQlCSVQo MjEpCisjZGVmaW5lIFNXX0xOVDJfTFBUWF9QCQkJQklUKDIyKQorI2RlZmluZSBTV19MTlQyX0xQ VFhfTgkJCUJJVCgyMykKKyNkZWZpbmUgU1dfTE5UMl9IU1RYX1BSRV9PRQkJQklUKDI0KQorI2Rl ZmluZSBTV19MTlQyX0hTVFhfT0UJCQlCSVQoMjUpCisKK3N0cnVjdCBtdGtfbWlwaV90eCB7CisJ c3RydWN0IGRldmljZSAqZGV2OworCXZvaWQgX19pb21lbSAqcmVnczsKKwl1bnNpZ25lZCBpbnQg ZGF0YV9yYXRlOworCXN0cnVjdCBjbGtfaHcgcGxsX2h3OworCXN0cnVjdCBjbGsgKnBsbDsKK307 CisKK3N0YXRpYyB2b2lkIG10a19taXBpX3R4X21hc2soc3RydWN0IG10a19taXBpX3R4ICptaXBp X3R4LCB1MzIgb2Zmc2V0LCB1MzIgbWFzaywKKwkJCSAgICAgdTMyIGRhdGEpCit7CisJdTMyIHRl bXAgPSByZWFkbChtaXBpX3R4LT5yZWdzICsgb2Zmc2V0KTsKKworCXdyaXRlbCgodGVtcCAmIH5t YXNrKSB8IChkYXRhICYgbWFzayksIG1pcGlfdHgtPnJlZ3MgKyBvZmZzZXQpOworfQorCitzdGF0 aWMgaW50IG10a19taXBpX3R4X3BsbF9wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQoreworCXN0 cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9IGNvbnRhaW5lcl9vZihodywgc3RydWN0IG10a19t aXBpX3R4LAorCQkJCQkJICAgcGxsX2h3KTsKKwl1bnNpZ25lZCBpbnQgdHhkaXYsIHR4ZGl2MCwg dHhkaXYxOworCXU2NCBwY3c7CisKKwlkZXZfZGJnKG1pcGlfdHgtPmRldiwgInByZXBhcmU6ICV1 IEh6XG4iLCBtaXBpX3R4LT5kYXRhX3JhdGUpOworCisJaWYgKG1pcGlfdHgtPmRhdGFfcmF0ZSA+ PSA1MDAwMDAwMDApIHsKKwkJdHhkaXYgPSAxOworCQl0eGRpdjAgPSAwOworCQl0eGRpdjEgPSAw OworCX0gZWxzZSBpZiAobWlwaV90eC0+ZGF0YV9yYXRlID49IDI1MDAwMDAwMCkgeworCQl0eGRp diA9IDI7CisJCXR4ZGl2MCA9IDE7CisJCXR4ZGl2MSA9IDA7CisJfSBlbHNlIGlmIChtaXBpX3R4 LT5kYXRhX3JhdGUgPj0gMTI1MDAwMDAwKSB7CisJCXR4ZGl2ID0gNDsKKwkJdHhkaXYwID0gMjsK KwkJdHhkaXYxID0gMDsKKwl9IGVsc2UgaWYgKG1pcGlfdHgtPmRhdGFfcmF0ZSA+IDYyMDAwMDAw KSB7CisJCXR4ZGl2ID0gODsKKwkJdHhkaXYwID0gMjsKKwkJdHhkaXYxID0gMTsKKwl9IGVsc2Ug aWYgKG1pcGlfdHgtPmRhdGFfcmF0ZSA+PSA1MDAwMDAwMCkgeworCQl0eGRpdiA9IDE2OworCQl0 eGRpdjAgPSAyOworCQl0eGRpdjEgPSAyOworCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOwor CX0KKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9CR19DT04sCisJCQkg UkdfRFNJX1ZPVVRfTVNLIHwgUkdfRFNJX0JHX0NLRU4gfCBSR19EU0lfQkdfQ09SRV9FTiwKKwkJ CSAoNCA8PCAyMCkgfCAoNCA8PCAxNykgfCAoNCA8PCAxNCkgfAorCQkJICg0IDw8IDExKSB8ICg0 IDw8IDgpIHwgKDQgPDwgNSkgfAorCQkJIFJHX0RTSV9CR19DS0VOIHwgUkdfRFNJX0JHX0NPUkVf RU4pOworCisJdXNsZWVwX3JhbmdlKDMwLCAxMDApOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBp X3R4LCBNSVBJVFhfRFNJX1RPUF9DT04sCisJCQkgUkdfRFNJX0xOVF9JTVBfQ0FMX0NPREUgfCBS R19EU0lfTE5UX0hTX0JJQVNfRU4sCisJCQkgKDggPDwgNCkgfCBSR19EU0lfTE5UX0hTX0JJQVNf RU4pOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0NPTiwKKwkJCSBS R19EU0lfQ0tHX0xET09VVF9FTiB8IFJHX0RTSV9MRE9DT1JFX0VOLAorCQkJIFJHX0RTSV9DS0df TERPT1VUX0VOIHwgUkdfRFNJX0xET0NPUkVfRU4pOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBp X3R4LCBNSVBJVFhfRFNJX1BMTF9QV1IsCisJCQkgUkdfRFNJX01QUExMX1NETV9QV1JfT04gfCBS R19EU0lfTVBQTExfU0RNX0lTT19FTiwKKwkJCSBSR19EU0lfTVBQTExfU0RNX1BXUl9PTik7CisK KwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjAsIFJHX0RTSV9N UFBMTF9QTExfRU4sIDApOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJ X1BMTF9DT04wLAorCQkJIFJHX0RTSV9NUFBMTF9UWERJVjAgfCBSR19EU0lfTVBQTExfVFhESVYx IHwKKwkJCSBSR19EU0lfTVBQTExfUFJFRElWLAorCQkJICh0eGRpdjAgPDwgMykgfCAodHhkaXYx IDw8IDUpKTsKKworCS8qCisJICogUExMIFBDVyBjb25maWcKKwkgKiBQQ1cgYml0IDI0fjMwID0g aW50ZWdlciBwYXJ0IG9mIHBjdworCSAqIFBDVyBiaXQgMH4yMyA9IGZyYWN0aW9uYWwgcGFydCBv ZiBwY3cKKwkgKiBwY3cgPSBkYXRhX1JhdGUqNCp0eGRpdi8oUmVmX2NsayoyKTsKKwkgKiBQb3N0 IERJViA9NCwgc28gbmVlZCBkYXRhX1JhdGUqNAorCSAqIFJlZl9jbGsgaXMgMjZNSHoKKwkgKi8K KwlwY3cgPSAoKHU2NCltaXBpX3R4LT5kYXRhX3JhdGUgKiAyICogdHhkaXYpIDw8IDI0OworCXBj dyAvPSAyNjAwMDAwMDsKKwl3cml0ZWwocGN3LCBtaXBpX3R4LT5yZWdzICsgTUlQSVRYX0RTSV9Q TExfQ09OMik7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NP TjEsCisJCQkgUkdfRFNJX01QUExMX1NETV9GUkFfRU4sIFJHX0RTSV9NUFBMTF9TRE1fRlJBX0VO KTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09OMCwKKwkJ CSBSR19EU0lfTVBQTExfUExMX0VOLCBSR19EU0lfTVBQTExfUExMX0VOKTsKKworCXVzbGVlcF9y YW5nZSgyMCwgMTAwKTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9Q TExfQ09OMSwKKwkJCSBSR19EU0lfTVBQTExfU0RNX1NTQ19FTiwgMCk7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIHZvaWQgbXRrX21pcGlfdHhfcGxsX3VucHJlcGFyZShzdHJ1Y3QgY2xrX2h3 ICpodykKK3sKKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBjb250YWluZXJfb2YoaHcs IHN0cnVjdCBtdGtfbWlwaV90eCwKKwkJCQkJCSAgIHBsbF9odyk7CisKKwlkZXZfZGJnKG1pcGlf dHgtPmRldiwgInVucHJlcGFyZVxuIik7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1J UElUWF9EU0lfUExMX0NPTjAsIFJHX0RTSV9NUFBMTF9QTExfRU4sIDApOworCisJbXRrX21pcGlf dHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9QV1IsCisJCQkgUkdfRFNJX01QUExMX1NE TV9JU09fRU4gfCBSR19EU0lfTVBQTExfU0RNX1BXUl9PTiwKKwkJCSBSR19EU0lfTVBQTExfU0RN X0lTT19FTik7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfVE9QX0NP TiwgUkdfRFNJX0xOVF9IU19CSUFTX0VOLCAwKTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90 eCwgTUlQSVRYX0RTSV9DT04sCisJCQkgUkdfRFNJX0NLR19MRE9PVVRfRU4gfCBSR19EU0lfTERP Q09SRV9FTiwgMCk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfQkdf Q09OLAorCQkJIFJHX0RTSV9CR19DS0VOIHwgUkdfRFNJX0JHX0NPUkVfRU4sIDApOworCisJbXRr X21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04wLCBSR19EU0lfTVBQTExf RElWX01TSywgMCk7Cit9CisKK3N0YXRpYyBsb25nIG10a19taXBpX3R4X3BsbF9yb3VuZF9yYXRl KHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkJICAgICAgIHVuc2ln bmVkIGxvbmcgKnByYXRlKQoreworCXJldHVybiBjbGFtcF92YWwocmF0ZSwgNTAwMDAwMDAsIDEy NTAwMDAwMDApOworfQorCitzdGF0aWMgaW50IG10a19taXBpX3R4X3BsbF9zZXRfcmF0ZShzdHJ1 Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAorCQkJCSAgICB1bnNpZ25lZCBsb25n IHBhcmVudF9yYXRlKQoreworCXN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9IGNvbnRhaW5l cl9vZihodywgc3RydWN0IG10a19taXBpX3R4LAorCQkJCQkJICAgcGxsX2h3KTsKKworCWRldl9k YmcobWlwaV90eC0+ZGV2LCAic2V0IHJhdGU6ICVsdSBIelxuIiwgcmF0ZSk7CisKKwltaXBpX3R4 LT5kYXRhX3JhdGUgPSByYXRlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBs b25nIG10a19taXBpX3R4X3BsbF9yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywKKwkJCQkJ CSB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQoreworCXN0cnVjdCBtdGtfbWlwaV90eCAqbWlw aV90eCA9IGNvbnRhaW5lcl9vZihodywgc3RydWN0IG10a19taXBpX3R4LAorCQkJCQkJICAgcGxs X2h3KTsKKwlyZXR1cm4gbWlwaV90eC0+ZGF0YV9yYXRlOworfQorCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGNsa19vcHMgbXRrX21pcGlfdHhfcGxsX29wcyA9IHsKKwkucHJlcGFyZSA9IG10a19taXBp X3R4X3BsbF9wcmVwYXJlLAorCS51bnByZXBhcmUgPSBtdGtfbWlwaV90eF9wbGxfdW5wcmVwYXJl LAorCS5yb3VuZF9yYXRlID0gbXRrX21pcGlfdHhfcGxsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRl ID0gbXRrX21pcGlfdHhfcGxsX3NldF9yYXRlLAorCS5yZWNhbGNfcmF0ZSA9IG10a19taXBpX3R4 X3BsbF9yZWNhbGNfcmF0ZSwKK307CisKK3N0YXRpYyBpbnQgbXRrX21pcGlfdHhfcG93ZXJfb25f c2lnbmFsKHN0cnVjdCBwaHkgKnBoeSkKK3sKKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHgg PSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQ SVRYX0RTSV9DTE9DS19MQU5FLAorCQkJIFJHX0RTSV9MTlRDX0xET09VVF9FTiwgUkdfRFNJX0xO VENfTERPT1VUX0VOKTsKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfREFU QV9MQU5FMCwKKwkJCSBSR19EU0lfTE5UMF9MRE9PVVRfRU4sIFJHX0RTSV9MTlQwX0xET09VVF9F Tik7CisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0RBVEFfTEFORTEsCisJ CQkgUkdfRFNJX0xOVDFfTERPT1VUX0VOLCBSR19EU0lfTE5UMV9MRE9PVVRfRU4pOworCW10a19t aXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9EQVRBX0xBTkUyLAorCQkJIFJHX0RTSV9M TlQyX0xET09VVF9FTiwgUkdfRFNJX0xOVDJfTERPT1VUX0VOKTsKKwltdGtfbWlwaV90eF9tYXNr KG1pcGlfdHgsIE1JUElUWF9EU0lfREFUQV9MQU5FMywKKwkJCSBSR19EU0lfTE5UM19MRE9PVVRf RU4sIFJHX0RTSV9MTlQzX0xET09VVF9FTik7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgs IE1JUElUWF9EU0lfVE9QX0NPTiwgUkdfRFNJX1BBRF9USUVfTE9XX0VOLCAwKTsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50IG10a19taXBpX3R4X3Bvd2VyX29uKHN0cnVjdCBwaHkgKnBo eSkKK3sKKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBwaHlfZ2V0X2RydmRhdGEocGh5 KTsKKwlpbnQgcmV0OworCisJLyogUG93ZXIgdXAgY29yZSBhbmQgZW5hYmxlIFBMTCAqLworCXJl dCA9IGNsa19wcmVwYXJlX2VuYWJsZShtaXBpX3R4LT5wbGwpOworCWlmIChyZXQgPCAwKQorCQly ZXR1cm4gcmV0OworCisJLyogRW5hYmxlIERTSSBMYW5lIExETyBvdXRwdXRzLCBkaXNhYmxlIHBh ZCB0aWUgbG93ICovCisJbXRrX21pcGlfdHhfcG93ZXJfb25fc2lnbmFsKHBoeSk7CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXRrX21pcGlfdHhfcG93ZXJfb2ZmX3NpZ25hbChzdHJ1 Y3QgcGh5ICpwaHkpCit7CisJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gcGh5X2dldF9k cnZkYXRhKHBoeSk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfVE9Q X0NPTiwgUkdfRFNJX1BBRF9USUVfTE9XX0VOLAorCQkJIFJHX0RTSV9QQURfVElFX0xPV19FTik7 CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfQ0xPQ0tfTEFORSwKKwkJ CSBSR19EU0lfTE5UQ19MRE9PVVRfRU4sIDApOworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwg TUlQSVRYX0RTSV9EQVRBX0xBTkUwLAorCQkJIFJHX0RTSV9MTlQwX0xET09VVF9FTiwgMCk7CisJ bXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0RBVEFfTEFORTEsCisJCQkgUkdf RFNJX0xOVDFfTERPT1VUX0VOLCAwKTsKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElU WF9EU0lfREFUQV9MQU5FMiwKKwkJCSBSR19EU0lfTE5UMl9MRE9PVVRfRU4sIDApOworCW10a19t aXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9EQVRBX0xBTkUzLAorCQkJIFJHX0RTSV9M TlQzX0xET09VVF9FTiwgMCk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX21pcGlfdHhfcG93ZXJfb2Zm KHN0cnVjdCBwaHkgKnBoeSkKK3sKKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBwaHlf Z2V0X2RydmRhdGEocGh5KTsKKworCS8qIEVuYWJsZSBwYWQgdGllIGxvdywgZGlzYWJsZSBEU0kg TGFuZSBMRE8gb3V0cHV0cyAqLworCW10a19taXBpX3R4X3Bvd2VyX29mZl9zaWduYWwocGh5KTsK KworCS8qIERpc2FibGUgUExMIGFuZCBwb3dlciBkb3duIGNvcmUgKi8KKwljbGtfZGlzYWJsZV91 bnByZXBhcmUobWlwaV90eC0+cGxsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IHBoeV9vcHMgbXRrX21pcGlfdHhfb3BzID0geworCS5wb3dlcl9vbiA9IG10a19taXBp X3R4X3Bvd2VyX29uLAorCS5wb3dlcl9vZmYgPSBtdGtfbWlwaV90eF9wb3dlcl9vZmYsCisJLm93 bmVyID0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IG10a19taXBpX3R4X3Byb2JlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBk ZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHg7CisJc3RydWN0IHJlc291cmNl ICptZW07CisJc3RydWN0IGNsayAqcmVmX2NsazsKKwljb25zdCBjaGFyICpyZWZfY2xrX25hbWU7 CisJc3RydWN0IGNsa19pbml0X2RhdGEgY2xrX2luaXQgPSB7CisJCS5vcHMgPSAmbXRrX21pcGlf dHhfcGxsX29wcywKKwkJLm51bV9wYXJlbnRzID0gMSwKKwkJLnBhcmVudF9uYW1lcyA9IChjb25z dCBjaGFyICogY29uc3QgKikmcmVmX2Nsa19uYW1lLAorCQkuZmxhZ3MgPSBDTEtfU0VUX1JBVEVf R0FURSwKKwl9OworCXN0cnVjdCBwaHkgKnBoeTsKKwlzdHJ1Y3QgcGh5X3Byb3ZpZGVyICpwaHlf cHJvdmlkZXI7CisJaW50IHJldDsKKworCW1pcGlfdHggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXpl b2YoKm1pcGlfdHgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1pcGlfdHgpCisJCXJldHVybiAtRU5P TUVNOworCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVN LCAwKTsKKwltaXBpX3R4LT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgbWVtKTsK KwlpZiAoSVNfRVJSKG1pcGlfdHgtPnJlZ3MpKSB7CisJCXJldCA9IFBUUl9FUlIobWlwaV90eC0+ cmVncyk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBtZW1vcnkgcmVzb3VyY2U6ICVk XG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJlZl9jbGsgPSBkZXZtX2Nsa19nZXQo ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKHJlZl9jbGspKSB7CisJCXJldCA9IFBUUl9FUlIocmVm X2Nsayk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCByZWZlcmVuY2UgY2xvY2s6ICVk XG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZWZfY2xrX25hbWUgPSBfX2Nsa19nZXRf bmFtZShyZWZfY2xrKTsKKworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGRldi0+b2Zf bm9kZSwgImNsb2NrLW91dHB1dC1uYW1lcyIsCisJCQkJICAgICAgJmNsa19pbml0Lm5hbWUpOwor CWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlYWQgY2xvY2stb3V0 cHV0LW5hbWVzOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwltaXBpX3R4LT5w bGxfaHcuaW5pdCA9ICZjbGtfaW5pdDsKKwltaXBpX3R4LT5wbGwgPSBkZXZtX2Nsa19yZWdpc3Rl cihkZXYsICZtaXBpX3R4LT5wbGxfaHcpOworCWlmIChJU19FUlIobWlwaV90eC0+cGxsKSkgewor CQlyZXQgPSBQVFJfRVJSKG1pcGlfdHgtPnBsbCk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRv IHJlZ2lzdGVyIFBMTDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcGh5ID0g ZGV2bV9waHlfY3JlYXRlKGRldiwgTlVMTCwgJm10a19taXBpX3R4X29wcyk7CisJaWYgKElTX0VS UihwaHkpKSB7CisJCXJldCA9IFBUUl9FUlIocGh5KTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQg dG8gY3JlYXRlIE1JUEkgRC1QSFk6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlw aHlfc2V0X2RydmRhdGEocGh5LCBtaXBpX3R4KTsKKworCXBoeV9wcm92aWRlciA9IGRldm1fb2Zf cGh5X3Byb3ZpZGVyX3JlZ2lzdGVyKGRldiwgb2ZfcGh5X3NpbXBsZV94bGF0ZSk7CisJaWYgKElT X0VSUihwaHkpKSB7CisJCXJldCA9IFBUUl9FUlIocGh5X3Byb3ZpZGVyKTsKKwkJcmV0dXJuIHJl dDsKKwl9CisKKwltaXBpX3R4LT5kZXYgPSBkZXY7CisKKwlyZXR1cm4gb2ZfY2xrX2FkZF9wcm92 aWRlcihkZXYtPm9mX25vZGUsIG9mX2Nsa19zcmNfc2ltcGxlX2dldCwKKwkJCQkgICBtaXBpX3R4 LT5wbGwpOworfQorCitzdGF0aWMgaW50IG10a19taXBpX3R4X3JlbW92ZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQoreworCW9mX2Nsa19kZWxfcHJvdmlkZXIocGRldi0+ZGV2Lm9mX25v ZGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBt dGtfbWlwaV90eF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTcz LW1pcGktdHgiLCB9LAorCXt9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfbWlw aV90eF9kcml2ZXIgPSB7CisJLnByb2JlID0gbXRrX21pcGlfdHhfcHJvYmUsCisJLnJlbW92ZSA9 IG10a19taXBpX3R4X3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtZWRpYXRlay1t aXBpLXR4IiwKKwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX21pcGlfdHhfbWF0Y2gsCisJfSwKK307 Ci0tIAoyLjcuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs Cg==