From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philipp Zabel Subject: [PATCH v16 4/8] drm/mediatek: Add DSI sub driver Date: Fri, 6 May 2016 15:05:50 +0200 Message-ID: <1462539954-26158-5-git-send-email-p.zabel@pengutronix.de> References: <1462539954-26158-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: <1462539954-26158-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: devicetree@vger.kernel.org RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkIGEgZHJtIGVu Y29kZXIvY29ubmVjdG9yIGRyaXZlciBmb3IgdGhlIE1JUEkgRFNJIGZ1bmN0aW9uCmJsb2NrIG9m IHRoZSBNZWRpYXRlayBkaXNwbGF5IHN1YnN5c3RlbSBhbmQgYSBwaHkgZHJpdmVyIGZvciB0aGUg TUlQSSBUWApELVBIWSBjb250cm9sIG1vZHVsZS4KClNpZ25lZC1vZmYtYnk6IEppdGFvIFNoaSA8 aml0YW8uc2hpQG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJlbCA8cC56 YWJlbEBwZW5ndXRyb25peC5kZT4KLS0tCkNoYW5nZXMgc2luY2UgdjE1OgogLSBPcmRlciBtdGtf ZHJtX2RyaXZlcnMgYWxwaGFiZXRpY2FsbHkKLS0tCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv S2NvbmZpZyAgICAgICB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUg ICAgICB8ICAgNCArLQogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMgfCAg IDIgKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmggfCAgIDIgKwogZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kc2kuYyAgICAgfCA5MjcgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX21pcGlfdHgu YyB8IDQ2MyArKysrKysrKysrKysrKysrCiA2IGZpbGVzIGNoYW5nZWQsIDEzOTkgaW5zZXJ0aW9u cygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHNpLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX21pcGlfdHguYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKaW5kZXggMzBlNTM3 MS4uZWVlZmM5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcK KysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKQEAgLTQsNiArNCw4IEBAIGNv bmZpZyBEUk1fTUVESUFURUsKIAlkZXBlbmRzIG9uIEFSQ0hfTUVESUFURUsgfHwgKEFSTSAmJiBD T01QSUxFX1RFU1QpCiAJc2VsZWN0IERSTV9HRU1fQ01BX0hFTFBFUgogCXNlbGVjdCBEUk1fS01T X0hFTFBFUgorCXNlbGVjdCBEUk1fTUlQSV9EU0kKKwlzZWxlY3QgRFJNX1BBTkVMCiAJc2VsZWN0 IElPTU1VX0RNQQogCXNlbGVjdCBNRU1PUlkKIAlzZWxlY3QgTVRLX1NNSQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL01ha2VmaWxlCmluZGV4IGQ0YmRlN2MuLmU3ODFkYjVhIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L01ha2VmaWxlCkBAIC02LDYgKzYsOCBAQCBtZWRpYXRlay1kcm0teSA6PSBtdGtfZGlzcF9vdmwu byBcCiAJCSAgbXRrX2RybV9kcnYubyBcCiAJCSAgbXRrX2RybV9mYi5vIFwKIAkJICBtdGtfZHJt X2dlbS5vIFwKLQkJICBtdGtfZHJtX3BsYW5lLm8KKwkJICBtdGtfZHJtX3BsYW5lLm8gXAorCQkg IG10a19kc2kubyBcCisJCSAgbXRrX21pcGlfdHgubwogCiBvYmotJChDT05GSUdfRFJNX01FRElB VEVLKSArPSBtZWRpYXRlay1kcm0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYu YwppbmRleCBlNmU1NjU0Li4wODc4MmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX2RybV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9kcnYuYwpAQCAtNTE3LDYgKzUxNyw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVy ICogY29uc3QgbXRrX2RybV9kcml2ZXJzW10gPSB7CiAJJm10a19kaXNwX292bF9kcml2ZXIsCiAJ Jm10a19kaXNwX3JkbWFfZHJpdmVyLAogCSZtdGtfZHJtX3BsYXRmb3JtX2RyaXZlciwKKwkmbXRr X2RzaV9kcml2ZXIsCisJJm10a19taXBpX3R4X2RyaXZlciwKIH07CiAKIHN0YXRpYyBpbnQgX19p bml0IG10a19kcm1faW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19kcm1fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYu aAppbmRleCAyN2RjOGZhLi5hYzZjOTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX2RybV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9kcnYuaApAQCAtNTMsNSArNTMsNyBAQCBzdHJ1Y3QgbXRrX2RybV9wcml2YXRlIHsKIGV4dGVy biBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kZHBfZHJpdmVyOwogZXh0ZXJuIHN0cnVjdCBw bGF0Zm9ybV9kcml2ZXIgbXRrX2Rpc3Bfb3ZsX2RyaXZlcjsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZv cm1fZHJpdmVyIG10a19kaXNwX3JkbWFfZHJpdmVyOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9k cml2ZXIgbXRrX2RzaV9kcml2ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtf bWlwaV90eF9kcml2ZXI7CiAKICNlbmRpZiAvKiBNVEtfRFJNX0RSVl9IICovCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5jIGIvZHJpdmVycy9ncHUvZHJtL21l ZGlhdGVrL210a19kc2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGU4 ZmY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kc2ku YwpAQCAtMCwwICsxLDkyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJ bmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICov CisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBl ci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJt X21pcGlfZHNpLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorI2luY2x1ZGUgPGxpbnV4 L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L29m Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9n cmFwaC5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0 Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4KKworI2luY2x1ZGUg Im10a19kcm1fZGRwX2NvbXAuaCIKKworI2RlZmluZSBEU0lfVklERU9fRklGT19ERVBUSAkoMTky MCAvIDQpCisjZGVmaW5lIERTSV9IT1NUX0ZJRk9fREVQVEgJNjQKKworI2RlZmluZSBEU0lfU1RB UlQJCTB4MDAKKworI2RlZmluZSBEU0lfQ09OX0NUUkwJCTB4MTAKKyNkZWZpbmUgRFNJX1JFU0VU CQkJQklUKDApCisjZGVmaW5lIERTSV9FTgkJCQlCSVQoMSkKKworI2RlZmluZSBEU0lfTU9ERV9D VFJMCQkweDE0CisjZGVmaW5lIE1PREUJCQkJKDMpCisjZGVmaW5lIENNRF9NT0RFCQkJMAorI2Rl ZmluZSBTWU5DX1BVTFNFX01PREUJCQkxCisjZGVmaW5lIFNZTkNfRVZFTlRfTU9ERQkJCTIKKyNk ZWZpbmUgQlVSU1RfTU9ERQkJCTMKKyNkZWZpbmUgRlJNX01PREUJCQlCSVQoMTYpCisjZGVmaW5l IE1JWF9NT0RFCQkJQklUKDE3KQorCisjZGVmaW5lIERTSV9UWFJYX0NUUkwJCTB4MTgKKyNkZWZp bmUgVkNfTlVNCQkJCSgyIDw8IDApCisjZGVmaW5lIExBTkVfTlVNCQkJKDB4ZiA8PCAyKQorI2Rl ZmluZSBESVNfRU9UCQkJCUJJVCg2KQorI2RlZmluZSBOVUxMX0VOCQkJCUJJVCg3KQorI2RlZmlu ZSBURV9GUkVFUlVOCQkJQklUKDgpCisjZGVmaW5lIEVYVF9URV9FTgkJCUJJVCg5KQorI2RlZmlu ZSBFWFRfVEVfRURHRQkJCUJJVCgxMCkKKyNkZWZpbmUgTUFYX1JUTl9TSVpFCQkJKDB4ZiA8PCAx MikKKyNkZWZpbmUgSFNUWF9DS0xQX0VOCQkJQklUKDE2KQorCisjZGVmaW5lIERTSV9QU0NUUkwJ CTB4MWMKKyNkZWZpbmUgRFNJX1BTX1dDCQkJMHgzZmZmCisjZGVmaW5lIERTSV9QU19TRUwJCQko MyA8PCAxNikKKyNkZWZpbmUgUEFDS0VEX1BTXzE2QklUX1JHQjU2NQkJKDAgPDwgMTYpCisjZGVm aW5lIExPT1NFTFlfUFNfMThCSVRfUkdCNjY2CQkoMSA8PCAxNikKKyNkZWZpbmUgUEFDS0VEX1BT XzE4QklUX1JHQjY2NgkJKDIgPDwgMTYpCisjZGVmaW5lIFBBQ0tFRF9QU18yNEJJVF9SR0I4ODgJ CSgzIDw8IDE2KQorCisjZGVmaW5lIERTSV9WU0FfTkwJCTB4MjAKKyNkZWZpbmUgRFNJX1ZCUF9O TAkJMHgyNAorI2RlZmluZSBEU0lfVkZQX05MCQkweDI4CisjZGVmaW5lIERTSV9WQUNUX05MCQkw eDJDCisjZGVmaW5lIERTSV9IU0FfV0MJCTB4NTAKKyNkZWZpbmUgRFNJX0hCUF9XQwkJMHg1NAor I2RlZmluZSBEU0lfSEZQX1dDCQkweDU4CisKKyNkZWZpbmUgRFNJX0hTVFhfQ0tMX1dDCQkweDY0 CisKKyNkZWZpbmUgRFNJX1BIWV9MQ0NPTgkJMHgxMDQKKyNkZWZpbmUgTENfSFNfVFhfRU4JCQlC SVQoMCkKKyNkZWZpbmUgTENfVUxQTV9FTgkJCUJJVCgxKQorI2RlZmluZSBMQ19XQUtFVVBfRU4J CQlCSVQoMikKKworI2RlZmluZSBEU0lfUEhZX0xEMENPTgkJMHgxMDgKKyNkZWZpbmUgTEQwX0hT X1RYX0VOCQkJQklUKDApCisjZGVmaW5lIExEMF9VTFBNX0VOCQkJQklUKDEpCisjZGVmaW5lIExE MF9XQUtFVVBfRU4JCQlCSVQoMikKKworI2RlZmluZSBEU0lfUEhZX1RJTUVDT04wCTB4MTEwCisj ZGVmaW5lIExQWAkJCQkoMHhmZiA8PCAwKQorI2RlZmluZSBIU19QUlBSCQkJCSgweGZmIDw8IDgp CisjZGVmaW5lIEhTX1pFUk8JCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lIEhTX1RSQUlMCQkJKDB4 ZmYgPDwgMjQpCisKKyNkZWZpbmUgRFNJX1BIWV9USU1FQ09OMQkweDExNAorI2RlZmluZSBUQV9H TwkJCQkoMHhmZiA8PCAwKQorI2RlZmluZSBUQV9TVVJFCQkJCSgweGZmIDw8IDgpCisjZGVmaW5l IFRBX0dFVAkJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgREFfSFNfRVhJVAkJCSgweGZmIDw8IDI0 KQorCisjZGVmaW5lIERTSV9QSFlfVElNRUNPTjIJMHgxMTgKKyNkZWZpbmUgQ09OVF9ERVQJCQko MHhmZiA8PCAwKQorI2RlZmluZSBDTEtfWkVSTwkJCSgweGZmIDw8IDE2KQorI2RlZmluZSBDTEtf VFJBSUwJCQkoMHhmZiA8PCAyNCkKKworI2RlZmluZSBEU0lfUEhZX1RJTUVDT04zCTB4MTFjCisj ZGVmaW5lIENMS19IU19QUlBSCQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgQ0xLX0hTX1BPU1QJCQko MHhmZiA8PCA4KQorI2RlZmluZSBDTEtfSFNfRVhJVAkJCSgweGZmIDw8IDE2KQorCisjZGVmaW5l IE5TX1RPX0NZQ0xFKG4sIGMpICAgICgobikgLyAoYykgKyAoKChuKSAlIChjKSkgPyAxIDogMCkp CisKK3N0cnVjdCBwaHk7CisKK3N0cnVjdCBtdGtfZHNpIHsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21w IGRkcF9jb21wOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbWlwaV9kc2lfaG9zdCBo b3N0OworCXN0cnVjdCBkcm1fZW5jb2RlciBlbmNvZGVyOworCXN0cnVjdCBkcm1fY29ubmVjdG9y IGNvbm47CisJc3RydWN0IGRybV9wYW5lbCAqcGFuZWw7CisJc3RydWN0IGRybV9icmlkZ2UgKmJy aWRnZTsKKwlzdHJ1Y3QgcGh5ICpwaHk7CisKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisKKwlzdHJ1 Y3QgY2xrICplbmdpbmVfY2xrOworCXN0cnVjdCBjbGsgKmRpZ2l0YWxfY2xrOworCXN0cnVjdCBj bGsgKmhzX2NsazsKKworCXUzMiBkYXRhX3JhdGU7CisKKwl1bnNpZ25lZCBsb25nIG1vZGVfZmxh Z3M7CisJZW51bSBtaXBpX2RzaV9waXhlbF9mb3JtYXQgZm9ybWF0OworCXVuc2lnbmVkIGludCBs YW5lczsKKwlzdHJ1Y3QgdmlkZW9tb2RlIHZtOworCWludCByZWZjb3VudDsKKwlib29sIGVuYWJs ZWQ7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfZHNpICplbmNvZGVyX3RvX2RzaShz dHJ1Y3QgZHJtX2VuY29kZXIgKmUpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihlLCBzdHJ1Y3Qg bXRrX2RzaSwgZW5jb2Rlcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19kc2kgKmNv bm5lY3Rvcl90b19kc2koc3RydWN0IGRybV9jb25uZWN0b3IgKmMpCit7CisJcmV0dXJuIGNvbnRh aW5lcl9vZihjLCBzdHJ1Y3QgbXRrX2RzaSwgY29ubik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3Ry dWN0IG10a19kc2kgKmhvc3RfdG9fZHNpKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpoKQoreworCXJl dHVybiBjb250YWluZXJfb2YoaCwgc3RydWN0IG10a19kc2ksIGhvc3QpOworfQorCitzdGF0aWMg dm9pZCBtdGtfZHNpX21hc2soc3RydWN0IG10a19kc2kgKmRzaSwgdTMyIG9mZnNldCwgdTMyIG1h c2ssIHUzMiBkYXRhKQoreworCXUzMiB0ZW1wID0gcmVhZGwoZHNpLT5yZWdzICsgb2Zmc2V0KTsK KworCXdyaXRlbCgodGVtcCAmIH5tYXNrKSB8IChkYXRhICYgbWFzayksIGRzaS0+cmVncyArIG9m ZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9waHlfdGltY29uZmlnKHN0cnVjdCBtdGtfZHNp ICpkc2kpCit7CisJdTMyIHRpbWNvbjAsIHRpbWNvbjEsIHRpbWNvbjIsIHRpbWNvbjM7CisJdW5z aWduZWQgaW50IHVpLCBjeWNsZV90aW1lOworCXVuc2lnbmVkIGludCBscHg7CisKKwl1aSA9IDEw MDAgLyBkc2ktPmRhdGFfcmF0ZSArIDB4MDE7CisJY3ljbGVfdGltZSA9IDgwMDAgLyBkc2ktPmRh dGFfcmF0ZSArIDB4MDE7CisJbHB4ID0gNTsKKworCXRpbWNvbjAgPSAoOCA8PCAyNCkgfCAoMHhh IDw8IDE2KSB8ICgweDYgPDwgOCkgfCBscHg7CisJdGltY29uMSA9ICg3IDw8IDI0KSB8ICg1ICog bHB4IDw8IDE2KSB8ICgoMyAqIGxweCkgLyAyKSA8PCA4IHwKKwkJICAoNCAqIGxweCk7CisJdGlt Y29uMiA9ICgoTlNfVE9fQ1lDTEUoMHg2NCwgY3ljbGVfdGltZSkgKyAweGEpIDw8IDI0KSB8CisJ CSAgKE5TX1RPX0NZQ0xFKDB4MTUwLCBjeWNsZV90aW1lKSA8PCAxNik7CisJdGltY29uMyA9ICgy ICogbHB4KSA8PCAxNiB8IE5TX1RPX0NZQ0xFKDgwICsgNTIgKiB1aSwgY3ljbGVfdGltZSkgPDwg OCB8CisJCSAgIE5TX1RPX0NZQ0xFKDB4NDAsIGN5Y2xlX3RpbWUpOworCisJd3JpdGVsKHRpbWNv bjAsIGRzaS0+cmVncyArIERTSV9QSFlfVElNRUNPTjApOworCXdyaXRlbCh0aW1jb24xLCBkc2kt PnJlZ3MgKyBEU0lfUEhZX1RJTUVDT04xKTsKKwl3cml0ZWwodGltY29uMiwgZHNpLT5yZWdzICsg RFNJX1BIWV9USU1FQ09OMik7CisJd3JpdGVsKHRpbWNvbjMsIGRzaS0+cmVncyArIERTSV9QSFlf VElNRUNPTjMpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX2VuYWJsZShzdHJ1Y3QgbXRrX2Rz aSAqZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERTSV9DT05fQ1RSTCwgRFNJX0VOLCBEU0lf RU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX2Rpc2FibGUoc3RydWN0IG10a19kc2kgKmRz aSkKK3sKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfQ09OX0NUUkwsIERTSV9FTiwgMCk7Cit9CisK K3N0YXRpYyB2b2lkIG10a19kc2lfcmVzZXQoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwltdGtf ZHNpX21hc2soZHNpLCBEU0lfQ09OX0NUUkwsIERTSV9SRVNFVCwgRFNJX1JFU0VUKTsKKwltdGtf ZHNpX21hc2soZHNpLCBEU0lfQ09OX0NUUkwsIERTSV9SRVNFVCwgMCk7Cit9CisKK3N0YXRpYyBp bnQgbXRrX2RzaV9wb3dlcm9uKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJc3RydWN0IGRldmlj ZSAqZGV2ID0gZHNpLT5kZXY7CisJaW50IHJldDsKKworCWlmICgrK2RzaS0+cmVmY291bnQgIT0g MSkKKwkJcmV0dXJuIDA7CisKKwkvKioKKwkgKiBkYXRhX3JhdGUgPSAocGl4ZWxfY2xvY2sgLyAx MDAwKSAqIHBpeGVsX2RpcHRoICogbWlwaV9yYXRpbzsKKwkgKiBwaXhlbF9jbG9jayB1bml0IGlz IEtoeiwgZGF0YV9yYXRhIHVuaXQgaXMgTUh6LCBzbyBuZWVkIGRpdmlkZSAxMDAwLgorCSAqIG1p cGlfcmF0aW8gaXMgbWlwaSBjbGsgY29lZmZpY2llbnQgZm9yIGJhbGFuY2UgdGhlIHBpeGVsIGNs ayBpbiBtaXBpLgorCSAqIHdlIHNldCBtaXBpX3JhdGlvIGlzIDEuMDUuCisJICovCisJZHNpLT5k YXRhX3JhdGUgPSBkc2ktPnZtLnBpeGVsY2xvY2sgKiAzICogMjEgLyAoMSAqIDEwMDAgKiAxMCk7 CisKKwlyZXQgPSBjbGtfc2V0X3JhdGUoZHNpLT5oc19jbGssIGRzaS0+ZGF0YV9yYXRlICogMTAw MDAwMCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gc2V0IGRh dGEgcmF0ZTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3JlZmNvdW50OworCX0KKworCXBoeV9w b3dlcl9vbihkc2ktPnBoeSk7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5lbmdp bmVfY2xrKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBlbmFi bGUgZW5naW5lIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfcGh5X3Bvd2VyX29mZjsK Kwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5kaWdpdGFsX2Nsayk7CisJaWYg KHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIGRpZ2l0YWwgY2xv Y2s6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9kaXNhYmxlX2VuZ2luZV9jbGs7CisJfQorCisJ bXRrX2RzaV9lbmFibGUoZHNpKTsKKwltdGtfZHNpX3Jlc2V0KGRzaSk7CisJZHNpX3BoeV90aW1j b25maWcoZHNpKTsKKworCXJldHVybiAwOworCitlcnJfZGlzYWJsZV9lbmdpbmVfY2xrOgorCWNs a19kaXNhYmxlX3VucHJlcGFyZShkc2ktPmVuZ2luZV9jbGspOworZXJyX3BoeV9wb3dlcl9vZmY6 CisJcGh5X3Bvd2VyX29mZihkc2ktPnBoeSk7CitlcnJfcmVmY291bnQ6CisJZHNpLT5yZWZjb3Vu dC0tOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9jbGtfdWxwX21vZGVfZW50 ZXIoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xD Q09OLCBMQ19IU19UWF9FTiwgMCk7CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MQ0NPTiwg TENfVUxQTV9FTiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9jbGtfdWxwX21vZGVfbGVhdmUo c3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xDQ09O LCBMQ19VTFBNX0VOLCAwKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xDQ09OLCBMQ19X QUtFVVBfRU4sIExDX1dBS0VVUF9FTik7CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MQ0NP TiwgTENfV0FLRVVQX0VOLCAwKTsKK30KKworc3RhdGljIHZvaWQgZHNpX2xhbmUwX3VscF9tb2Rl X2VudGVyKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BI WV9MRDBDT04sIExEMF9IU19UWF9FTiwgMCk7CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9M RDBDT04sIExEMF9VTFBNX0VOLCAwKTsKK30KKworc3RhdGljIHZvaWQgZHNpX2xhbmUwX3VscF9t b2RlX2xlYXZlKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJ X1BIWV9MRDBDT04sIExEMF9VTFBNX0VOLCAwKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZ X0xEMENPTiwgTEQwX1dBS0VVUF9FTiwgTEQwX1dBS0VVUF9FTik7CisJbXRrX2RzaV9tYXNrKGRz aSwgRFNJX1BIWV9MRDBDT04sIExEMF9XQUtFVVBfRU4sIDApOworfQorCitzdGF0aWMgYm9vbCBk c2lfY2xrX2hzX3N0YXRlKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJdTMyIHRtcF9yZWcxOwor CisJdG1wX3JlZzEgPSByZWFkbChkc2ktPnJlZ3MgKyBEU0lfUEhZX0xDQ09OKTsKKwlyZXR1cm4g KCh0bXBfcmVnMSAmIExDX0hTX1RYX0VOKSA9PSAxKSA/IHRydWUgOiBmYWxzZTsKK30KKworc3Rh dGljIHZvaWQgZHNpX2Nsa19oc19tb2RlKHN0cnVjdCBtdGtfZHNpICpkc2ksIGJvb2wgZW50ZXIp Cit7CisJaWYgKGVudGVyICYmICFkc2lfY2xrX2hzX3N0YXRlKGRzaSkpCisJCW10a19kc2lfbWFz ayhkc2ksIERTSV9QSFlfTENDT04sIExDX0hTX1RYX0VOLCBMQ19IU19UWF9FTik7CisJZWxzZSBp ZiAoIWVudGVyICYmIGRzaV9jbGtfaHNfc3RhdGUoZHNpKSkKKwkJbXRrX2RzaV9tYXNrKGRzaSwg RFNJX1BIWV9MQ0NPTiwgTENfSFNfVFhfRU4sIDApOworfQorCitzdGF0aWMgdm9pZCBkc2lfc2V0 X21vZGUoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwl1MzIgdmlkX21vZGUgPSBDTURfTU9ERTsK KworCWlmIChkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPKSB7CisJCXZpZF9t b2RlID0gU1lOQ19QVUxTRV9NT0RFOworCisJCWlmICgoZHNpLT5tb2RlX2ZsYWdzICYgTUlQSV9E U0lfTU9ERV9WSURFT19CVVJTVCkgJiYKKwkJICAgICEoZHNpLT5tb2RlX2ZsYWdzICYgTUlQSV9E U0lfTU9ERV9WSURFT19TWU5DX1BVTFNFKSkKKwkJCXZpZF9tb2RlID0gQlVSU1RfTU9ERTsKKwl9 CisKKwl3cml0ZWwodmlkX21vZGUsIGRzaS0+cmVncyArIERTSV9NT0RFX0NUUkwpOworfQorCitz dGF0aWMgdm9pZCBkc2lfcHNfY29udHJvbF92YWN0KHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJ c3RydWN0IHZpZGVvbW9kZSAqdm0gPSAmZHNpLT52bTsKKwl1MzIgZHNpX2J1Zl9icHAsIHBzX3dj OworCXUzMiBwc19icHBfbW9kZTsKKworCWlmIChkc2ktPmZvcm1hdCA9PSBNSVBJX0RTSV9GTVRf UkdCNTY1KQorCQlkc2lfYnVmX2JwcCA9IDI7CisJZWxzZQorCQlkc2lfYnVmX2JwcCA9IDM7CisK Kwlwc193YyA9IHZtLT5oYWN0aXZlICogZHNpX2J1Zl9icHA7CisJcHNfYnBwX21vZGUgPSBwc193 YzsKKworCXN3aXRjaCAoZHNpLT5mb3JtYXQpIHsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I4ODg6 CisJCXBzX2JwcF9tb2RlIHw9IFBBQ0tFRF9QU18yNEJJVF9SR0I4ODg7CisJCWJyZWFrOworCWNh c2UgTUlQSV9EU0lfRk1UX1JHQjY2NjoKKwkJcHNfYnBwX21vZGUgfD0gUEFDS0VEX1BTXzE4QklU X1JHQjY2NjsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2X1BBQ0tFRDoKKwkJ cHNfYnBwX21vZGUgfD0gTE9PU0VMWV9QU18xOEJJVF9SR0I2NjY7CisJCWJyZWFrOworCWNhc2Ug TUlQSV9EU0lfRk1UX1JHQjU2NToKKwkJcHNfYnBwX21vZGUgfD0gUEFDS0VEX1BTXzE2QklUX1JH QjU2NTsKKwkJYnJlYWs7CisJfQorCisJd3JpdGVsKHZtLT52YWN0aXZlLCBkc2ktPnJlZ3MgKyBE U0lfVkFDVF9OTCk7CisJd3JpdGVsKHBzX2JwcF9tb2RlLCBkc2ktPnJlZ3MgKyBEU0lfUFNDVFJM KTsKKwl3cml0ZWwocHNfd2MsIGRzaS0+cmVncyArIERTSV9IU1RYX0NLTF9XQyk7Cit9CisKK3N0 YXRpYyB2b2lkIGRzaV9yeHR4X2NvbnRyb2woc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwl1MzIg dG1wX3JlZzsKKworCXN3aXRjaCAoZHNpLT5sYW5lcykgeworCWNhc2UgMToKKwkJdG1wX3JlZyA9 IDEgPDwgMjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl0bXBfcmVnID0gMyA8PCAyOworCQlicmVh azsKKwljYXNlIDM6CisJCXRtcF9yZWcgPSA3IDw8IDI7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJ dG1wX3JlZyA9IDB4ZiA8PCAyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl0bXBfcmVnID0gMHhm IDw8IDI7CisJCWJyZWFrOworCX0KKworCXdyaXRlbCh0bXBfcmVnLCBkc2ktPnJlZ3MgKyBEU0lf VFhSWF9DVFJMKTsKK30KKworc3RhdGljIHZvaWQgZHNpX3BzX2NvbnRyb2woc3RydWN0IG10a19k c2kgKmRzaSkKK3sKKwl1bnNpZ25lZCBpbnQgZHNpX3RtcF9idWZfYnBwOworCXUzMiB0bXBfcmVn OworCisJc3dpdGNoIChkc2ktPmZvcm1hdCkgeworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjg4ODoK KwkJdG1wX3JlZyA9IFBBQ0tFRF9QU18yNEJJVF9SR0I4ODg7CisJCWRzaV90bXBfYnVmX2JwcCA9 IDM7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2NjoKKwkJdG1wX3JlZyA9IExP T1NFTFlfUFNfMThCSVRfUkdCNjY2OworCQlkc2lfdG1wX2J1Zl9icHAgPSAzOworCQlicmVhazsK KwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjZfUEFDS0VEOgorCQl0bXBfcmVnID0gUEFDS0VEX1BT XzE4QklUX1JHQjY2NjsKKwkJZHNpX3RtcF9idWZfYnBwID0gMzsKKwkJYnJlYWs7CisJY2FzZSBN SVBJX0RTSV9GTVRfUkdCNTY1OgorCQl0bXBfcmVnID0gUEFDS0VEX1BTXzE2QklUX1JHQjU2NTsK KwkJZHNpX3RtcF9idWZfYnBwID0gMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdG1wX3JlZyA9 IFBBQ0tFRF9QU18yNEJJVF9SR0I4ODg7CisJCWRzaV90bXBfYnVmX2JwcCA9IDM7CisJCWJyZWFr OworCX0KKworCXRtcF9yZWcgKz0gZHNpLT52bS5oYWN0aXZlICogZHNpX3RtcF9idWZfYnBwICYg RFNJX1BTX1dDOworCXdyaXRlbCh0bXBfcmVnLCBkc2ktPnJlZ3MgKyBEU0lfUFNDVFJMKTsKK30K Kworc3RhdGljIHZvaWQgZHNpX2NvbmZpZ192ZG9fdGltaW5nKHN0cnVjdCBtdGtfZHNpICpkc2kp Cit7CisJdW5zaWduZWQgaW50IGhvcml6b250YWxfc3luY19hY3RpdmVfYnl0ZTsKKwl1bnNpZ25l ZCBpbnQgaG9yaXpvbnRhbF9iYWNrcG9yY2hfYnl0ZTsKKwl1bnNpZ25lZCBpbnQgaG9yaXpvbnRh bF9mcm9udHBvcmNoX2J5dGU7CisJdW5zaWduZWQgaW50IGRzaV90bXBfYnVmX2JwcDsKKworCXN0 cnVjdCB2aWRlb21vZGUgKnZtID0gJmRzaS0+dm07CisKKwlpZiAoZHNpLT5mb3JtYXQgPT0gTUlQ SV9EU0lfRk1UX1JHQjU2NSkKKwkJZHNpX3RtcF9idWZfYnBwID0gMjsKKwllbHNlCisJCWRzaV90 bXBfYnVmX2JwcCA9IDM7CisKKwl3cml0ZWwodm0tPnZzeW5jX2xlbiwgZHNpLT5yZWdzICsgRFNJ X1ZTQV9OTCk7CisJd3JpdGVsKHZtLT52YmFja19wb3JjaCwgZHNpLT5yZWdzICsgRFNJX1ZCUF9O TCk7CisJd3JpdGVsKHZtLT52ZnJvbnRfcG9yY2gsIGRzaS0+cmVncyArIERTSV9WRlBfTkwpOwor CXdyaXRlbCh2bS0+dmFjdGl2ZSwgZHNpLT5yZWdzICsgRFNJX1ZBQ1RfTkwpOworCisJaG9yaXpv bnRhbF9zeW5jX2FjdGl2ZV9ieXRlID0gKHZtLT5oc3luY19sZW4gKiBkc2lfdG1wX2J1Zl9icHAg LSAxMCk7CisKKwlpZiAoZHNpLT5tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19TWU5D X1BVTFNFKQorCQlob3Jpem9udGFsX2JhY2twb3JjaF9ieXRlID0KKwkJCSh2bS0+aGJhY2tfcG9y Y2ggKiBkc2lfdG1wX2J1Zl9icHAgLSAxMCk7CisJZWxzZQorCQlob3Jpem9udGFsX2JhY2twb3Jj aF9ieXRlID0gKCh2bS0+aGJhY2tfcG9yY2ggKyB2bS0+aHN5bmNfbGVuKSAqCisJCQlkc2lfdG1w X2J1Zl9icHAgLSAxMCk7CisKKwlob3Jpem9udGFsX2Zyb250cG9yY2hfYnl0ZSA9ICh2bS0+aGZy b250X3BvcmNoICogZHNpX3RtcF9idWZfYnBwIC0gMTIpOworCisJd3JpdGVsKGhvcml6b250YWxf c3luY19hY3RpdmVfYnl0ZSwgZHNpLT5yZWdzICsgRFNJX0hTQV9XQyk7CisJd3JpdGVsKGhvcml6 b250YWxfYmFja3BvcmNoX2J5dGUsIGRzaS0+cmVncyArIERTSV9IQlBfV0MpOworCXdyaXRlbCho b3Jpem9udGFsX2Zyb250cG9yY2hfYnl0ZSwgZHNpLT5yZWdzICsgRFNJX0hGUF9XQyk7CisKKwlk c2lfcHNfY29udHJvbChkc2kpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX3N0YXJ0KHN0cnVj dCBtdGtfZHNpICpkc2kpCit7CisJd3JpdGVsKDAsIGRzaS0+cmVncyArIERTSV9TVEFSVCk7CisJ d3JpdGVsKDEsIGRzaS0+cmVncyArIERTSV9TVEFSVCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19k c2lfcG93ZXJvZmYoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlpZiAoV0FSTl9PTihkc2ktPnJl ZmNvdW50ID09IDApKQorCQlyZXR1cm47CisKKwlpZiAoLS1kc2ktPnJlZmNvdW50ICE9IDApCisJ CXJldHVybjsKKworCWRzaV9sYW5lMF91bHBfbW9kZV9lbnRlcihkc2kpOworCWRzaV9jbGtfdWxw X21vZGVfZW50ZXIoZHNpKTsKKworCW10a19kc2lfZGlzYWJsZShkc2kpOworCisJY2xrX2Rpc2Fi bGVfdW5wcmVwYXJlKGRzaS0+ZW5naW5lX2Nsayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRz aS0+ZGlnaXRhbF9jbGspOworCisJcGh5X3Bvd2VyX29mZihkc2ktPnBoeSk7Cit9CisKK3N0YXRp YyB2b2lkIG10a19vdXRwdXRfZHNpX2VuYWJsZShzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCWlu dCByZXQ7CisKKwlpZiAoZHNpLT5lbmFibGVkKQorCQlyZXR1cm47CisKKwlpZiAoZHNpLT5wYW5l bCkgeworCQlpZiAoZHJtX3BhbmVsX3ByZXBhcmUoZHNpLT5wYW5lbCkpIHsKKwkJCURSTV9FUlJP UigiZmFpbGVkIHRvIHNldHVwIHRoZSBwYW5lbFxuIik7CisJCQlyZXR1cm47CisJCX0KKwl9CisK KwlyZXQgPSBtdGtfZHNpX3Bvd2Vyb24oZHNpKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fRVJS T1IoImZhaWxlZCB0byBwb3dlciBvbiBkc2lcbiIpOworCQlyZXR1cm47CisJfQorCisJZHNpX3J4 dHhfY29udHJvbChkc2kpOworCisJZHNpX2Nsa191bHBfbW9kZV9sZWF2ZShkc2kpOworCWRzaV9s YW5lMF91bHBfbW9kZV9sZWF2ZShkc2kpOworCWRzaV9jbGtfaHNfbW9kZShkc2ksIDApOworCWRz aV9zZXRfbW9kZShkc2kpOworCisJZHNpX3BzX2NvbnRyb2xfdmFjdChkc2kpOworCWRzaV9jb25m aWdfdmRvX3RpbWluZyhkc2kpOworCisJZHNpX3NldF9tb2RlKGRzaSk7CisJZHNpX2Nsa19oc19t b2RlKGRzaSwgMSk7CisKKwltdGtfZHNpX3N0YXJ0KGRzaSk7CisKKwlkc2ktPmVuYWJsZWQgPSB0 cnVlOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3V0cHV0X2RzaV9kaXNhYmxlKHN0cnVjdCBtdGtf ZHNpICpkc2kpCit7CisJaWYgKCFkc2ktPmVuYWJsZWQpCisJCXJldHVybjsKKworCWlmIChkc2kt PnBhbmVsKSB7CisJCWlmIChkcm1fcGFuZWxfZGlzYWJsZShkc2ktPnBhbmVsKSkgeworCQkJRFJN X0VSUk9SKCJmYWlsZWQgdG8gZGlzYWJsZSB0aGUgcGFuZWxcbiIpOworCQkJcmV0dXJuOworCQl9 CisJfQorCisJbXRrX2RzaV9wb3dlcm9mZihkc2kpOworCisJZHNpLT5lbmFibGVkID0gZmFsc2U7 Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfZW5jb2Rlcl9kZXN0cm95KHN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2RlcikKK3sKKwlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOworfQorCitz dGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIG10a19kc2lfZW5jb2Rlcl9mdW5j cyA9IHsKKwkuZGVzdHJveSA9IG10a19kc2lfZW5jb2Rlcl9kZXN0cm95LAorfTsKKworc3RhdGlj IGJvb2wgbXRrX2RzaV9lbmNvZGVyX21vZGVfZml4dXAoc3RydWN0IGRybV9lbmNvZGVyICplbmNv ZGVyLAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJ CQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJcmV0 dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfZW5jb2Rlcl9tb2RlX3NldChzdHJ1 Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZCkKK3sK KwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gZW5jb2Rlcl90b19kc2koZW5jb2Rlcik7CisKKwlkc2kt PnZtLnBpeGVsY2xvY2sgPSBhZGp1c3RlZC0+Y2xvY2s7CisJZHNpLT52bS5oYWN0aXZlID0gYWRq dXN0ZWQtPmhkaXNwbGF5OworCWRzaS0+dm0uaGJhY2tfcG9yY2ggPSBhZGp1c3RlZC0+aHRvdGFs IC0gYWRqdXN0ZWQtPmhzeW5jX2VuZDsKKwlkc2ktPnZtLmhmcm9udF9wb3JjaCA9IGFkanVzdGVk LT5oc3luY19zdGFydCAtIGFkanVzdGVkLT5oZGlzcGxheTsKKwlkc2ktPnZtLmhzeW5jX2xlbiA9 IGFkanVzdGVkLT5oc3luY19lbmQgLSBhZGp1c3RlZC0+aHN5bmNfc3RhcnQ7CisKKwlkc2ktPnZt LnZhY3RpdmUgPSBhZGp1c3RlZC0+dmRpc3BsYXk7CisJZHNpLT52bS52YmFja19wb3JjaCA9IGFk anVzdGVkLT52dG90YWwgLSBhZGp1c3RlZC0+dnN5bmNfZW5kOworCWRzaS0+dm0udmZyb250X3Bv cmNoID0gYWRqdXN0ZWQtPnZzeW5jX3N0YXJ0IC0gYWRqdXN0ZWQtPnZkaXNwbGF5OworCWRzaS0+ dm0udnN5bmNfbGVuID0gYWRqdXN0ZWQtPnZzeW5jX2VuZCAtIGFkanVzdGVkLT52c3luY19zdGFy dDsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9lbmNvZGVyX2Rpc2FibGUoc3RydWN0IGRybV9l bmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBtdGtfZHNpICpkc2kgPSBlbmNvZGVyX3RvX2Rz aShlbmNvZGVyKTsKKworCW10a19vdXRwdXRfZHNpX2Rpc2FibGUoZHNpKTsKK30KKworc3RhdGlj IHZvaWQgbXRrX2RzaV9lbmNvZGVyX2VuYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIp Cit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGVuY29kZXJfdG9fZHNpKGVuY29kZXIpOworCisJ bXRrX291dHB1dF9kc2lfZW5hYmxlKGRzaSk7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0 b3Jfc3RhdHVzIG10a19kc2lfY29ubmVjdG9yX2RldGVjdCgKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQoreworCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nv bm5lY3RlZDsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9jb25uZWN0b3JfZGVzdHJveShzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rl cihjb25uZWN0b3IpOworCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOworfQorCitz dGF0aWMgaW50IG10a19kc2lfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBtdGtfZHNpICpkc2kgPSBjb25uZWN0b3JfdG9fZHNp KGNvbm5lY3Rvcik7CisKKwlyZXR1cm4gZHJtX3BhbmVsX2dldF9tb2Rlcyhkc2ktPnBhbmVsKTsK K30KKworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2RlciAqbXRrX2RzaV9jb25uZWN0b3JfYmVzdF9l bmNvZGVyKAorCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBt dGtfZHNpICpkc2kgPSBjb25uZWN0b3JfdG9fZHNpKGNvbm5lY3Rvcik7CisKKwlyZXR1cm4gJmRz aS0+ZW5jb2RlcjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJf ZnVuY3MgbXRrX2RzaV9lbmNvZGVyX2hlbHBlcl9mdW5jcyA9IHsKKwkubW9kZV9maXh1cCA9IG10 a19kc2lfZW5jb2Rlcl9tb2RlX2ZpeHVwLAorCS5tb2RlX3NldCA9IG10a19kc2lfZW5jb2Rlcl9t b2RlX3NldCwKKwkuZGlzYWJsZSA9IG10a19kc2lfZW5jb2Rlcl9kaXNhYmxlLAorCS5lbmFibGUg PSBtdGtfZHNpX2VuY29kZXJfZW5hYmxlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f Y29ubmVjdG9yX2Z1bmNzIG10a19kc2lfY29ubmVjdG9yX2Z1bmNzID0geworCS5kcG1zID0gZHJt X2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2RwbXMsCisJLmRldGVjdCA9IG10a19kc2lfY29ubmVj dG9yX2RldGVjdCwKKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5l Y3Rvcl9tb2RlcywKKwkuZGVzdHJveSA9IG10a19kc2lfY29ubmVjdG9yX2Rlc3Ryb3ksCisJLnJl c2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAorCS5hdG9taWNfZHVwbGlj YXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwK KwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVz dHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxw ZXJfZnVuY3MKKwltdGtfZHNpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJLmdldF9tb2Rl cyA9IG10a19kc2lfY29ubmVjdG9yX2dldF9tb2RlcywKKwkuYmVzdF9lbmNvZGVyID0gbXRrX2Rz aV9jb25uZWN0b3JfYmVzdF9lbmNvZGVyLAorfTsKKworc3RhdGljIGludCBtdGtfZHJtX2F0dGFj aF9icmlkZ2Uoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJCQkgc3RydWN0IGRybV9lbmNv ZGVyICplbmNvZGVyKQoreworCWludCByZXQ7CisKKwlpZiAoIWJyaWRnZSkKKwkJcmV0dXJuIC1F Tk9FTlQ7CisKKwllbmNvZGVyLT5icmlkZ2UgPSBicmlkZ2U7CisJYnJpZGdlLT5lbmNvZGVyID0g ZW5jb2RlcjsKKwlyZXQgPSBkcm1fYnJpZGdlX2F0dGFjaChlbmNvZGVyLT5kZXYsIGJyaWRnZSk7 CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhdHRhY2ggYnJpZGdlIHRvIGRy bVxuIik7CisJCWVuY29kZXItPmJyaWRnZSA9IE5VTEw7CisJCWJyaWRnZS0+ZW5jb2RlciA9IE5V TEw7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdGtfZHNpX2NyZWF0ZV9j b25uZWN0b3Ioc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IG10a19kc2kgKmRzaSkKK3sK KwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9pbml0KGRybSwgJmRzaS0+Y29ubiwg Jm10a19kc2lfY29ubmVjdG9yX2Z1bmNzLAorCQkJCSBEUk1fTU9ERV9DT05ORUNUT1JfRFNJKTsK KwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGNvbm5lY3RvciBpbml0IHRvIGRy bVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZk c2ktPmNvbm4sICZtdGtfZHNpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCisJcmV0ID0gZHJt X2Nvbm5lY3Rvcl9yZWdpc3RlcigmZHNpLT5jb25uKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJP UigiRmFpbGVkIHRvIGNvbm5lY3RvciByZWdpc3RlciB0byBkcm1cbiIpOworCQlnb3RvIGVycl9j b25uZWN0b3JfY2xlYW51cDsKKwl9CisKKwlkc2ktPmNvbm4uZHBtcyA9IERSTV9NT0RFX0RQTVNf T0ZGOworCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2RlcigmZHNpLT5jb25uLCAmZHNp LT5lbmNvZGVyKTsKKworCWlmIChkc2ktPnBhbmVsKSB7CisJCXJldCA9IGRybV9wYW5lbF9hdHRh Y2goZHNpLT5wYW5lbCwgJmRzaS0+Y29ubik7CisJCWlmIChyZXQpIHsKKwkJCURSTV9FUlJPUigi RmFpbGVkIHRvIGF0dGFjaCBwYW5lbCB0byBkcm1cbiIpOworCQkJZ290byBlcnJfY29ubmVjdG9y X3VucmVnaXN0ZXI7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2Nvbm5lY3Rvcl91bnJl Z2lzdGVyOgorCWRybV9jb25uZWN0b3JfdW5yZWdpc3RlcigmZHNpLT5jb25uKTsKK2Vycl9jb25u ZWN0b3JfY2xlYW51cDoKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoJmRzaS0+Y29ubik7CisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdGtfZHNpX2NyZWF0ZV9jb25uX2VuYyhzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCWludCByZXQ7CisKKwly ZXQgPSBkcm1fZW5jb2Rlcl9pbml0KGRybSwgJmRzaS0+ZW5jb2RlciwgJm10a19kc2lfZW5jb2Rl cl9mdW5jcywKKwkJCSAgICAgICBEUk1fTU9ERV9FTkNPREVSX0RTSSwgTlVMTCk7CisJaWYgKHJl dCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBlbmNvZGVyIGluaXQgdG8gZHJtXG4iKTsKKwkJ cmV0dXJuIHJldDsKKwl9CisJZHJtX2VuY29kZXJfaGVscGVyX2FkZCgmZHNpLT5lbmNvZGVyLCAm bXRrX2RzaV9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7CisKKwkvKgorCSAqIEN1cnJlbnRseSBkaXNw bGF5IGRhdGEgcGF0aHMgYXJlIHN0YXRpY2FsbHkgYXNzaWduZWQgdG8gYSBjcnRjIGVhY2guCisJ ICogY3J0YyAwIGlzIE9WTDAgLT4gQ09MT1IwIC0+IEFBTCAtPiBPRCAtPiBSRE1BMCAtPiBVRk9F IC0+IERTSTAKKwkgKi8KKwlkc2ktPmVuY29kZXIucG9zc2libGVfY3J0Y3MgPSAxOworCisJLyog SWYgdGhlcmUncyBhIGJyaWRnZSwgYXR0YWNoIHRvIGl0IGFuZCBsZXQgaXQgY3JlYXRlIHRoZSBj b25uZWN0b3IgKi8KKwlyZXQgPSBtdGtfZHJtX2F0dGFjaF9icmlkZ2UoZHNpLT5icmlkZ2UsICZk c2ktPmVuY29kZXIpOworCWlmIChyZXQpIHsKKwkJLyogT3RoZXJ3aXNlIGNyZWF0ZSBvdXIgb3du IGNvbm5lY3RvciBhbmQgYXR0YWNoIHRvIGEgcGFuZWwgKi8KKwkJcmV0ID0gbXRrX2RzaV9jcmVh dGVfY29ubmVjdG9yKGRybSwgZHNpKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX2VuY29kZXJf Y2xlYW51cDsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2VuY29kZXJfY2xlYW51cDoKKwlkcm1f ZW5jb2Rlcl9jbGVhbnVwKCZkc2ktPmVuY29kZXIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRp YyB2b2lkIG10a19kc2lfZGVzdHJveV9jb25uX2VuYyhzdHJ1Y3QgbXRrX2RzaSAqZHNpKQorewor CWRybV9lbmNvZGVyX2NsZWFudXAoJmRzaS0+ZW5jb2Rlcik7CisJLyogU2tpcCBjb25uZWN0b3Ig Y2xlYW51cCBpZiBjcmVhdGlvbiB3YXMgZGVsZWdhdGVkIHRvIHRoZSBicmlkZ2UgKi8KKwlpZiAo ZHNpLT5jb25uLmRldikgeworCQlkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoJmRzaS0+Y29ubik7 CisJCWRybV9jb25uZWN0b3JfY2xlYW51cCgmZHNpLT5jb25uKTsKKwl9Cit9CisKK3N0YXRpYyB2 b2lkIG10a19kc2lfZGRwX3N0YXJ0KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJc3Ry dWN0IG10a19kc2kgKmRzaSA9IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3QgbXRrX2RzaSwgZGRw X2NvbXApOworCisJbXRrX2RzaV9wb3dlcm9uKGRzaSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19k c2lfZGRwX3N0b3Aoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlzdHJ1Y3QgbXRrX2Rz aSAqZHNpID0gY29udGFpbmVyX29mKGNvbXAsIHN0cnVjdCBtdGtfZHNpLCBkZHBfY29tcCk7CisK KwltdGtfZHNpX3Bvd2Vyb2ZmKGRzaSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2Rk cF9jb21wX2Z1bmNzIG10a19kc2lfZnVuY3MgPSB7CisJLnN0YXJ0ID0gbXRrX2RzaV9kZHBfc3Rh cnQsCisJLnN0b3AgPSBtdGtfZHNpX2RkcF9zdG9wLAorfTsKKworc3RhdGljIGludCBtdGtfZHNp X2hvc3RfYXR0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LAorCQkJICAgICAgIHN0cnVj dCBtaXBpX2RzaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gaG9z dF90b19kc2koaG9zdCk7CisKKwlkc2ktPmxhbmVzID0gZGV2aWNlLT5sYW5lczsKKwlkc2ktPmZv cm1hdCA9IGRldmljZS0+Zm9ybWF0OworCWRzaS0+bW9kZV9mbGFncyA9IGRldmljZS0+bW9kZV9m bGFnczsKKworCWlmIChkc2ktPmNvbm4uZGV2KQorCQlkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQo ZHNpLT5jb25uLmRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfZHNpX2hv c3RfZGV0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LAorCQkJICAgICAgIHN0cnVjdCBt aXBpX2RzaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gaG9zdF90 b19kc2koaG9zdCk7CisKKwlpZiAoZHNpLT5jb25uLmRldikKKwkJZHJtX2hlbHBlcl9ocGRfaXJx X2V2ZW50KGRzaS0+Y29ubi5kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgbWlwaV9kc2lfaG9zdF9vcHMgbXRrX2RzaV9vcHMgPSB7CisJLmF0dGFjaCA9IG10a19k c2lfaG9zdF9hdHRhY2gsCisJLmRldGFjaCA9IG10a19kc2lfaG9zdF9kZXRhY2gsCit9OworCitz dGF0aWMgaW50IG10a19kc2lfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Ug Km1hc3Rlciwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBkcm1fZGV2aWNlICpk cm0gPSBkYXRhOworCXN0cnVjdCBtdGtfZHNpICpkc2kgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsK KworCXJldCA9IG10a19kZHBfY29tcF9yZWdpc3Rlcihkcm0sICZkc2ktPmRkcF9jb21wKTsKKwlp ZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb21wb25l bnQgJXM6ICVkXG4iLAorCQkJZGV2LT5vZl9ub2RlLT5mdWxsX25hbWUsIHJldCk7CisJCXJldHVy biByZXQ7CisJfQorCisJcmV0ID0gbWlwaV9kc2lfaG9zdF9yZWdpc3RlcigmZHNpLT5ob3N0KTsK KwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBEU0kg aG9zdDogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2RkcF9jb21wX3VucmVnaXN0ZXI7CisJfQor CisJcmV0ID0gbXRrX2RzaV9jcmVhdGVfY29ubl9lbmMoZHJtLCBkc2kpOworCWlmIChyZXQpIHsK KwkJRFJNX0VSUk9SKCJFbmNvZGVyIGNyZWF0ZSBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKKwkJ Z290byBlcnJfdW5yZWdpc3RlcjsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX3VucmVnaXN0ZXI6 CisJbWlwaV9kc2lfaG9zdF91bnJlZ2lzdGVyKCZkc2ktPmhvc3QpOworZXJyX2RkcF9jb21wX3Vu cmVnaXN0ZXI6CisJbXRrX2RkcF9jb21wX3VucmVnaXN0ZXIoZHJtLCAmZHNpLT5kZHBfY29tcCk7 CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV91bmJpbmQoc3RydWN0IGRl dmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkgICB2b2lkICpkYXRhKQorewor CXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkYXRhOworCXN0cnVjdCBtdGtfZHNpICpkc2kgPSBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCW10a19kc2lfZGVzdHJveV9jb25uX2VuYyhkc2kpOwor CW1pcGlfZHNpX2hvc3RfdW5yZWdpc3RlcigmZHNpLT5ob3N0KTsKKwltdGtfZGRwX2NvbXBfdW5y ZWdpc3Rlcihkcm0sICZkc2ktPmRkcF9jb21wKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBj b21wb25lbnRfb3BzIG10a19kc2lfY29tcG9uZW50X29wcyA9IHsKKwkuYmluZCA9IG10a19kc2lf YmluZCwKKwkudW5iaW5kID0gbXRrX2RzaV91bmJpbmQsCit9OworCitzdGF0aWMgaW50IG10a19k c2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXRrX2Rz aSAqZHNpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGRldmlj ZV9ub2RlICpyZW1vdGVfbm9kZSwgKmVuZHBvaW50OworCXN0cnVjdCByZXNvdXJjZSAqcmVnczsK KwlpbnQgY29tcF9pZDsKKwlpbnQgcmV0OworCisJZHNpID0gZGV2bV9remFsbG9jKGRldiwgc2l6 ZW9mKCpkc2kpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRzaSkKKwkJcmV0dXJuIC1FTk9NRU07CisK Kwlkc2ktPmhvc3Qub3BzID0gJm10a19kc2lfb3BzOworCWRzaS0+aG9zdC5kZXYgPSBkZXY7CisK KwllbmRwb2ludCA9IG9mX2dyYXBoX2dldF9uZXh0X2VuZHBvaW50KGRldi0+b2Zfbm9kZSwgTlVM TCk7CisJaWYgKGVuZHBvaW50KSB7CisJCXJlbW90ZV9ub2RlID0gb2ZfZ3JhcGhfZ2V0X3JlbW90 ZV9wb3J0X3BhcmVudChlbmRwb2ludCk7CisJCWlmICghcmVtb3RlX25vZGUpIHsKKwkJCWRldl9l cnIoZGV2LCAiTm8gcGFuZWwgY29ubmVjdGVkXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9 CisKKwkJZHNpLT5icmlkZ2UgPSBvZl9kcm1fZmluZF9icmlkZ2UocmVtb3RlX25vZGUpOworCQlk c2ktPnBhbmVsID0gb2ZfZHJtX2ZpbmRfcGFuZWwocmVtb3RlX25vZGUpOworCQlvZl9ub2RlX3B1 dChyZW1vdGVfbm9kZSk7CisJCWlmICghZHNpLT5icmlkZ2UgJiYgIWRzaS0+cGFuZWwpIHsKKwkJ CWRldl9pbmZvKGRldiwgIldhaXRpbmcgZm9yIGJyaWRnZSBvciBwYW5lbCBkcml2ZXJcbiIpOwor CQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJCX0KKwl9CisKKwlkc2ktPmVuZ2luZV9jbGsgPSBk ZXZtX2Nsa19nZXQoZGV2LCAiZW5naW5lIik7CisJaWYgKElTX0VSUihkc2ktPmVuZ2luZV9jbGsp KSB7CisJCXJldCA9IFBUUl9FUlIoZHNpLT5lbmdpbmVfY2xrKTsKKwkJZGV2X2VycihkZXYsICJG YWlsZWQgdG8gZ2V0IGVuZ2luZSBjbG9jazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJ fQorCisJZHNpLT5kaWdpdGFsX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJkaWdpdGFsIik7CisJ aWYgKElTX0VSUihkc2ktPmRpZ2l0YWxfY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGRzaS0+ZGln aXRhbF9jbGspOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgZGlnaXRhbCBjbG9jazog JWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZHNpLT5oc19jbGsgPSBkZXZtX2Ns a19nZXQoZGV2LCAiaHMiKTsKKwlpZiAoSVNfRVJSKGRzaS0+aHNfY2xrKSkgeworCQlyZXQgPSBQ VFJfRVJSKGRzaS0+aHNfY2xrKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGhzIGNs b2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZWdzID0gcGxhdGZvcm1f Z2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlkc2ktPnJlZ3MgPSBkZXZt X2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZWdzKTsKKwlpZiAoSVNfRVJSKGRzaS0+cmVncykpIHsK KwkJcmV0ID0gUFRSX0VSUihkc2ktPnJlZ3MpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBp b3JlbWFwIG1lbW9yeTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZHNpLT5w aHkgPSBkZXZtX3BoeV9nZXQoZGV2LCAiZHBoeSIpOworCWlmIChJU19FUlIoZHNpLT5waHkpKSB7 CisJCXJldCA9IFBUUl9FUlIoZHNpLT5waHkpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBn ZXQgTUlQSS1EUEhZOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwljb21wX2lk ID0gbXRrX2RkcF9jb21wX2dldF9pZChkZXYtPm9mX25vZGUsIE1US19EU0kpOworCWlmIChjb21w X2lkIDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpZGVudGlmeSBieSBhbGlhczog JWRcbiIsIGNvbXBfaWQpOworCQlyZXR1cm4gY29tcF9pZDsKKwl9CisKKwlyZXQgPSBtdGtfZGRw X2NvbXBfaW5pdChkZXYsIGRldi0+b2Zfbm9kZSwgJmRzaS0+ZGRwX2NvbXAsIGNvbXBfaWQsCisJ CQkJJm10a19kc2lfZnVuY3MpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQg dG8gaW5pdGlhbGl6ZSBjb21wb25lbnQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0K KworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRzaSk7CisKKwlyZXR1cm4gY29tcG9uZW50 X2FkZCgmcGRldi0+ZGV2LCAmbXRrX2RzaV9jb21wb25lbnRfb3BzKTsKK30KKworc3RhdGljIGlu dCBtdGtfZHNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVj dCBtdGtfZHNpICpkc2kgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCW10a19vdXRw dXRfZHNpX2Rpc2FibGUoZHNpKTsKKwljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZtdGtfZHNp X2NvbXBvbmVudF9vcHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg b2ZfZGV2aWNlX2lkIG10a19kc2lfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1l ZGlhdGVrLG10ODE3My1kc2kiIH0sCisJeyB9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZl ciBtdGtfZHNpX2RyaXZlciA9IHsKKwkucHJvYmUgPSBtdGtfZHNpX3Byb2JlLAorCS5yZW1vdmUg PSBtdGtfZHNpX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtdGstZHNpIiwKKwkJ Lm9mX21hdGNoX3RhYmxlID0gbXRrX2RzaV9vZl9tYXRjaCwKKwl9LAorfTsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbWlwaV90eC5jIGIvZHJpdmVycy9ncHUvZHJt L21lZGlhdGVrL210a19taXBpX3R4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uY2Y4ZjM4ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfbWlwaV90eC5jCkBAIC0wLDAgKzEsNDYzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1 IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Ns ay1wcm92aWRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgv aW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9y bV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+CisKKyNkZWZpbmUgTUlQSVRY X0RTSV9DT04JCTB4MDAKKyNkZWZpbmUgUkdfRFNJX0xET0NPUkVfRU4JCUJJVCgwKQorI2RlZmlu ZSBSR19EU0lfQ0tHX0xET09VVF9FTgkJQklUKDEpCisjZGVmaW5lIFJHX0RTSV9CQ0xLX1NFTAkJ CSgzIDw8IDIpCisjZGVmaW5lIFJHX0RTSV9MRF9JRFhfU0VMCQkoNyA8PCA0KQorI2RlZmluZSBS R19EU0lfUEhZQ0xLX1NFTAkJKDIgPDwgOCkKKyNkZWZpbmUgUkdfRFNJX0RTSUNMS19GUkVRX1NF TAkJQklUKDEwKQorI2RlZmluZSBSR19EU0lfTFBUWF9DTE1QX0VOCQlCSVQoMTEpCisKKyNkZWZp bmUgTUlQSVRYX0RTSV9DTE9DS19MQU5FCTB4MDQKKyNkZWZpbmUgTUlQSVRYX0RTSV9EQVRBX0xB TkUwCTB4MDgKKyNkZWZpbmUgTUlQSVRYX0RTSV9EQVRBX0xBTkUxCTB4MGMKKyNkZWZpbmUgTUlQ SVRYX0RTSV9EQVRBX0xBTkUyCTB4MTAKKyNkZWZpbmUgTUlQSVRYX0RTSV9EQVRBX0xBTkUzCTB4 MTQKKyNkZWZpbmUgUkdfRFNJX0xOVHhfTERPT1VUX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJ X0xOVHhfQ0tMQU5FX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0xOVHhfTFBUWF9JUExVUzEJ CUJJVCgyKQorI2RlZmluZSBSR19EU0lfTE5UeF9MUFRYX0lQTFVTMgkJQklUKDMpCisjZGVmaW5l IFJHX0RTSV9MTlR4X0xQVFhfSU1JTlVTCQlCSVQoNCkKKyNkZWZpbmUgUkdfRFNJX0xOVHhfTFBD RF9JUExVUwkJQklUKDUpCisjZGVmaW5lIFJHX0RTSV9MTlR4X0xQQ0RfSU1JTlVTCQlCSVQoNikK KyNkZWZpbmUgUkdfRFNJX0xOVHhfUlRfQ09ERQkJKDB4ZiA8PCA4KQorCisjZGVmaW5lIE1JUElU 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 CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19taXBpX3R4ICptdGtfbWlwaV90eF9mcm9tX2Ns a19odyhzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGh3LCBzdHJ1 Y3QgbXRrX21pcGlfdHgsIHBsbF9odyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19taXBpX3R4X2Ns ZWFyX2JpdHMoc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4LCB1MzIgb2Zmc2V0LAorCQkJCSAg IHUzMiBiaXRzKQoreworCXUzMiB0ZW1wID0gcmVhZGwobWlwaV90eC0+cmVncyArIG9mZnNldCk7 CisKKwl3cml0ZWwodGVtcCAmIH5iaXRzLCBtaXBpX3R4LT5yZWdzICsgb2Zmc2V0KTsKK30KKwor c3RhdGljIHZvaWQgbXRrX21pcGlfdHhfc2V0X2JpdHMoc3RydWN0IG10a19taXBpX3R4ICptaXBp X3R4LCB1MzIgb2Zmc2V0LAorCQkJCSB1MzIgYml0cykKK3sKKwl1MzIgdGVtcCA9IHJlYWRsKG1p cGlfdHgtPnJlZ3MgKyBvZmZzZXQpOworCisJd3JpdGVsKHRlbXAgfCBiaXRzLCBtaXBpX3R4LT5y ZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgbXRrX21pcGlfdHhfdXBkYXRlX2JpdHMo c3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4LCB1MzIgb2Zmc2V0LAorCQkJCSAgICB1MzIgbWFz aywgdTMyIGRhdGEpCit7CisJdTMyIHRlbXAgPSByZWFkbChtaXBpX3R4LT5yZWdzICsgb2Zmc2V0 KTsKKworCXdyaXRlbCgodGVtcCAmIH5tYXNrKSB8IChkYXRhICYgbWFzayksIG1pcGlfdHgtPnJl Z3MgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW50IG10a19taXBpX3R4X3BsbF9wcmVwYXJlKHN0 cnVjdCBjbGtfaHcgKmh3KQoreworCXN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9IG10a19t aXBpX3R4X2Zyb21fY2xrX2h3KGh3KTsKKwl1bnNpZ25lZCBpbnQgdHhkaXYsIHR4ZGl2MCwgdHhk aXYxOworCXU2NCBwY3c7CisKKwlkZXZfZGJnKG1pcGlfdHgtPmRldiwgInByZXBhcmU6ICV1IEh6 XG4iLCBtaXBpX3R4LT5kYXRhX3JhdGUpOworCisJaWYgKG1pcGlfdHgtPmRhdGFfcmF0ZSA+PSA1 MDAwMDAwMDApIHsKKwkJdHhkaXYgPSAxOworCQl0eGRpdjAgPSAwOworCQl0eGRpdjEgPSAwOwor CX0gZWxzZSBpZiAobWlwaV90eC0+ZGF0YV9yYXRlID49IDI1MDAwMDAwMCkgeworCQl0eGRpdiA9 IDI7CisJCXR4ZGl2MCA9IDE7CisJCXR4ZGl2MSA9IDA7CisJfSBlbHNlIGlmIChtaXBpX3R4LT5k YXRhX3JhdGUgPj0gMTI1MDAwMDAwKSB7CisJCXR4ZGl2ID0gNDsKKwkJdHhkaXYwID0gMjsKKwkJ dHhkaXYxID0gMDsKKwl9IGVsc2UgaWYgKG1pcGlfdHgtPmRhdGFfcmF0ZSA+IDYyMDAwMDAwKSB7 CisJCXR4ZGl2ID0gODsKKwkJdHhkaXYwID0gMjsKKwkJdHhkaXYxID0gMTsKKwl9IGVsc2UgaWYg KG1pcGlfdHgtPmRhdGFfcmF0ZSA+PSA1MDAwMDAwMCkgeworCQl0eGRpdiA9IDE2OworCQl0eGRp djAgPSAyOworCQl0eGRpdjEgPSAyOworCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOworCX0K KworCW10a19taXBpX3R4X3VwZGF0ZV9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfQkdfQ09OLAor CQkJCVJHX0RTSV9WT1VUX01TSyB8CisJCQkJUkdfRFNJX0JHX0NLRU4gfCBSR19EU0lfQkdfQ09S RV9FTiwKKwkJCQkoNCA8PCAyMCkgfCAoNCA8PCAxNykgfCAoNCA8PCAxNCkgfAorCQkJCSg0IDw8 IDExKSB8ICg0IDw8IDgpIHwgKDQgPDwgNSkgfAorCQkJCVJHX0RTSV9CR19DS0VOIHwgUkdfRFNJ X0JHX0NPUkVfRU4pOworCisJdXNsZWVwX3JhbmdlKDMwLCAxMDApOworCisJbXRrX21pcGlfdHhf dXBkYXRlX2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9UT1BfQ09OLAorCQkJCVJHX0RTSV9MTlRf SU1QX0NBTF9DT0RFIHwgUkdfRFNJX0xOVF9IU19CSUFTX0VOLAorCQkJCSg4IDw8IDQpIHwgUkdf RFNJX0xOVF9IU19CSUFTX0VOKTsKKworCW10a19taXBpX3R4X3NldF9iaXRzKG1pcGlfdHgsIE1J UElUWF9EU0lfQ09OLAorCQkJICAgICBSR19EU0lfQ0tHX0xET09VVF9FTiB8IFJHX0RTSV9MRE9D T1JFX0VOKTsKKworCW10a19taXBpX3R4X3VwZGF0ZV9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lf UExMX1BXUiwKKwkJCQlSR19EU0lfTVBQTExfU0RNX1BXUl9PTiB8CisJCQkJUkdfRFNJX01QUExM X1NETV9JU09fRU4sCisJCQkJUkdfRFNJX01QUExMX1NETV9QV1JfT04pOworCisJbXRrX21pcGlf dHhfY2xlYXJfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04wLAorCQkJICAgICAgIFJH X0RTSV9NUFBMTF9QTExfRU4pOworCisJbXRrX21pcGlfdHhfdXBkYXRlX2JpdHMobWlwaV90eCwg TUlQSVRYX0RTSV9QTExfQ09OMCwKKwkJCQlSR19EU0lfTVBQTExfVFhESVYwIHwgUkdfRFNJX01Q UExMX1RYRElWMSB8CisJCQkJUkdfRFNJX01QUExMX1BSRURJViwKKwkJCQkodHhkaXYwIDw8IDMp IHwgKHR4ZGl2MSA8PCA1KSk7CisKKwkvKgorCSAqIFBMTCBQQ1cgY29uZmlnCisJICogUENXIGJp dCAyNH4zMCA9IGludGVnZXIgcGFydCBvZiBwY3cKKwkgKiBQQ1cgYml0IDB+MjMgPSBmcmFjdGlv bmFsIHBhcnQgb2YgcGN3CisJICogcGN3ID0gZGF0YV9SYXRlKjQqdHhkaXYvKFJlZl9jbGsqMik7 CisJICogUG9zdCBESVYgPTQsIHNvIG5lZWQgZGF0YV9SYXRlKjQKKwkgKiBSZWZfY2xrIGlzIDI2 TUh6CisJICovCisJcGN3ID0gZGl2X3U2NCgoKHU2NCltaXBpX3R4LT5kYXRhX3JhdGUgKiAyICog dHhkaXYpIDw8IDI0LAorCQkgICAgICAyNjAwMDAwMCk7CisJd3JpdGVsKHBjdywgbWlwaV90eC0+ cmVncyArIE1JUElUWF9EU0lfUExMX0NPTjIpOworCisJbXRrX21pcGlfdHhfc2V0X2JpdHMobWlw aV90eCwgTUlQSVRYX0RTSV9QTExfQ09OMSwKKwkJCSAgICAgUkdfRFNJX01QUExMX1NETV9GUkFf RU4pOworCisJbXRrX21pcGlfdHhfc2V0X2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09O MCwgUkdfRFNJX01QUExMX1BMTF9FTik7CisKKwl1c2xlZXBfcmFuZ2UoMjAsIDEwMCk7CisKKwlt dGtfbWlwaV90eF9jbGVhcl9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjEsCisJCQkg ICAgICAgUkdfRFNJX01QUExMX1NETV9TU0NfRU4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyB2b2lkIG10a19taXBpX3R4X3BsbF91bnByZXBhcmUoc3RydWN0IGNsa19odyAqaHcpCit7CisJ c3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gbXRrX21pcGlfdHhfZnJvbV9jbGtfaHcoaHcp OworCisJZGV2X2RiZyhtaXBpX3R4LT5kZXYsICJ1bnByZXBhcmVcbiIpOworCisJbXRrX21pcGlf dHhfY2xlYXJfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04wLAorCQkJICAgICAgIFJH X0RTSV9NUFBMTF9QTExfRU4pOworCisJbXRrX21pcGlfdHhfdXBkYXRlX2JpdHMobWlwaV90eCwg TUlQSVRYX0RTSV9QTExfUFdSLAorCQkJCVJHX0RTSV9NUFBMTF9TRE1fSVNPX0VOIHwKKwkJCQlS R19EU0lfTVBQTExfU0RNX1BXUl9PTiwKKwkJCQlSR19EU0lfTVBQTExfU0RNX0lTT19FTik7CisK KwltdGtfbWlwaV90eF9jbGVhcl9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfVE9QX0NPTiwKKwkJ CSAgICAgICBSR19EU0lfTE5UX0hTX0JJQVNfRU4pOworCisJbXRrX21pcGlfdHhfY2xlYXJfYml0 cyhtaXBpX3R4LCBNSVBJVFhfRFNJX0NPTiwKKwkJCSAgICAgICBSR19EU0lfQ0tHX0xET09VVF9F TiB8IFJHX0RTSV9MRE9DT1JFX0VOKTsKKworCW10a19taXBpX3R4X2NsZWFyX2JpdHMobWlwaV90 eCwgTUlQSVRYX0RTSV9CR19DT04sCisJCQkgICAgICAgUkdfRFNJX0JHX0NLRU4gfCBSR19EU0lf QkdfQ09SRV9FTik7CisKKwltdGtfbWlwaV90eF9jbGVhcl9iaXRzKG1pcGlfdHgsIE1JUElUWF9E U0lfUExMX0NPTjAsCisJCQkgICAgICAgUkdfRFNJX01QUExMX0RJVl9NU0spOworfQorCitzdGF0 aWMgbG9uZyBtdGtfbWlwaV90eF9wbGxfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5z aWduZWQgbG9uZyByYXRlLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nICpwcmF0ZSkKK3sKKwly ZXR1cm4gY2xhbXBfdmFsKHJhdGUsIDUwMDAwMDAwLCAxMjUwMDAwMDAwKTsKK30KKworc3RhdGlj IGludCBtdGtfbWlwaV90eF9wbGxfc2V0X3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVk IGxvbmcgcmF0ZSwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKK3sKKwlzdHJ1 Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBtdGtfbWlwaV90eF9mcm9tX2Nsa19odyhodyk7CisK KwlkZXZfZGJnKG1pcGlfdHgtPmRldiwgInNldCByYXRlOiAlbHUgSHpcbiIsIHJhdGUpOworCisJ bWlwaV90eC0+ZGF0YV9yYXRlID0gcmF0ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5z aWduZWQgbG9uZyBtdGtfbWlwaV90eF9wbGxfcmVjYWxjX3JhdGUoc3RydWN0IGNsa19odyAqaHcs CisJCQkJCQkgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX21pcGlf dHggKm1pcGlfdHggPSBtdGtfbWlwaV90eF9mcm9tX2Nsa19odyhodyk7CisKKwlyZXR1cm4gbWlw aV90eC0+ZGF0YV9yYXRlOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgbXRrX21p cGlfdHhfcGxsX29wcyA9IHsKKwkucHJlcGFyZSA9IG10a19taXBpX3R4X3BsbF9wcmVwYXJlLAor CS51bnByZXBhcmUgPSBtdGtfbWlwaV90eF9wbGxfdW5wcmVwYXJlLAorCS5yb3VuZF9yYXRlID0g bXRrX21pcGlfdHhfcGxsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gbXRrX21pcGlfdHhfcGxs X3NldF9yYXRlLAorCS5yZWNhbGNfcmF0ZSA9IG10a19taXBpX3R4X3BsbF9yZWNhbGNfcmF0ZSwK K307CisKK3N0YXRpYyBpbnQgbXRrX21pcGlfdHhfcG93ZXJfb25fc2lnbmFsKHN0cnVjdCBwaHkg KnBoeSkKK3sKKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBwaHlfZ2V0X2RydmRhdGEo cGh5KTsKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJZm9yIChyZWcgPSBNSVBJVFhfRFNJX0NMT0NL X0xBTkU7CisJICAgICByZWcgPD0gTUlQSVRYX0RTSV9EQVRBX0xBTkUzOyByZWcgKz0gNCkKKwkJ bXRrX21pcGlfdHhfc2V0X2JpdHMobWlwaV90eCwgcmVnLCBSR19EU0lfTE5UeF9MRE9PVVRfRU4p OworCisJbXRrX21pcGlfdHhfY2xlYXJfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1RPUF9DT04s CisJCQkgICAgICAgUkdfRFNJX1BBRF9USUVfTE9XX0VOKTsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IG10a19taXBpX3R4X3Bvd2VyX29uKHN0cnVjdCBwaHkgKnBoeSkKK3sKKwlzdHJ1 Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKKwlpbnQgcmV0 OworCisJLyogUG93ZXIgdXAgY29yZSBhbmQgZW5hYmxlIFBMTCAqLworCXJldCA9IGNsa19wcmVw YXJlX2VuYWJsZShtaXBpX3R4LT5wbGwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0Owor CisJLyogRW5hYmxlIERTSSBMYW5lIExETyBvdXRwdXRzLCBkaXNhYmxlIHBhZCB0aWUgbG93ICov CisJbXRrX21pcGlfdHhfcG93ZXJfb25fc2lnbmFsKHBoeSk7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIHZvaWQgbXRrX21pcGlfdHhfcG93ZXJfb2ZmX3NpZ25hbChzdHJ1Y3QgcGh5ICpwaHkp Cit7CisJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7 CisJdW5zaWduZWQgaW50IHJlZzsKKworCW10a19taXBpX3R4X3NldF9iaXRzKG1pcGlfdHgsIE1J UElUWF9EU0lfVE9QX0NPTiwKKwkJCSAgICAgUkdfRFNJX1BBRF9USUVfTE9XX0VOKTsKKworCWZv ciAocmVnID0gTUlQSVRYX0RTSV9DTE9DS19MQU5FOworCSAgICAgcmVnIDw9IE1JUElUWF9EU0lf REFUQV9MQU5FMzsgcmVnICs9IDQpCisJCW10a19taXBpX3R4X2NsZWFyX2JpdHMobWlwaV90eCwg cmVnLCBSR19EU0lfTE5UeF9MRE9PVVRfRU4pOworfQorCitzdGF0aWMgaW50IG10a19taXBpX3R4 X3Bvd2VyX29mZihzdHJ1Y3QgcGh5ICpwaHkpCit7CisJc3RydWN0IG10a19taXBpX3R4ICptaXBp X3R4ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7CisKKwkvKiBFbmFibGUgcGFkIHRpZSBsb3csIGRp c2FibGUgRFNJIExhbmUgTERPIG91dHB1dHMgKi8KKwltdGtfbWlwaV90eF9wb3dlcl9vZmZfc2ln bmFsKHBoeSk7CisKKwkvKiBEaXNhYmxlIFBMTCBhbmQgcG93ZXIgZG93biBjb3JlICovCisJY2xr X2Rpc2FibGVfdW5wcmVwYXJlKG1pcGlfdHgtPnBsbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBwaHlfb3BzIG10a19taXBpX3R4X29wcyA9IHsKKwkucG93ZXJfb24g PSBtdGtfbWlwaV90eF9wb3dlcl9vbiwKKwkucG93ZXJfb2ZmID0gbXRrX21pcGlfdHhfcG93ZXJf b2ZmLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGludCBtdGtfbWlwaV90 eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2Ug KmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4OworCXN0cnVj dCByZXNvdXJjZSAqbWVtOworCXN0cnVjdCBjbGsgKnJlZl9jbGs7CisJY29uc3QgY2hhciAqcmVm X2Nsa19uYW1lOworCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGNsa19pbml0ID0geworCQkub3BzID0g Jm10a19taXBpX3R4X3BsbF9vcHMsCisJCS5udW1fcGFyZW50cyA9IDEsCisJCS5wYXJlbnRfbmFt ZXMgPSAoY29uc3QgY2hhciAqIGNvbnN0ICopJnJlZl9jbGtfbmFtZSwKKwkJLmZsYWdzID0gQ0xL X1NFVF9SQVRFX0dBVEUsCisJfTsKKwlzdHJ1Y3QgcGh5ICpwaHk7CisJc3RydWN0IHBoeV9wcm92 aWRlciAqcGh5X3Byb3ZpZGVyOworCWludCByZXQ7CisKKwltaXBpX3R4ID0gZGV2bV9remFsbG9j KGRldiwgc2l6ZW9mKCptaXBpX3R4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtaXBpX3R4KQorCQly ZXR1cm4gLUVOT01FTTsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JF U09VUkNFX01FTSwgMCk7CisJbWlwaV90eC0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShk ZXYsIG1lbSk7CisJaWYgKElTX0VSUihtaXBpX3R4LT5yZWdzKSkgeworCQlyZXQgPSBQVFJfRVJS KG1pcGlfdHgtPnJlZ3MpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgbWVtb3J5IHJl c291cmNlOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZWZfY2xrID0gZGV2 bV9jbGtfZ2V0KGRldiwgTlVMTCk7CisJaWYgKElTX0VSUihyZWZfY2xrKSkgeworCQlyZXQgPSBQ VFJfRVJSKHJlZl9jbGspOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgcmVmZXJlbmNl IGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmVmX2Nsa19uYW1lID0g X19jbGtfZ2V0X25hbWUocmVmX2Nsayk7CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmlu ZyhkZXYtPm9mX25vZGUsICJjbG9jay1vdXRwdXQtbmFtZXMiLAorCQkJCSAgICAgICZjbGtfaW5p dC5uYW1lKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWFk IGNsb2NrLW91dHB1dC1uYW1lczogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJ bWlwaV90eC0+cGxsX2h3LmluaXQgPSAmY2xrX2luaXQ7CisJbWlwaV90eC0+cGxsID0gZGV2bV9j bGtfcmVnaXN0ZXIoZGV2LCAmbWlwaV90eC0+cGxsX2h3KTsKKwlpZiAoSVNfRVJSKG1pcGlfdHgt PnBsbCkpIHsKKwkJcmV0ID0gUFRSX0VSUihtaXBpX3R4LT5wbGwpOworCQlkZXZfZXJyKGRldiwg IkZhaWxlZCB0byByZWdpc3RlciBQTEw6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0K KworCXBoeSA9IGRldm1fcGh5X2NyZWF0ZShkZXYsIE5VTEwsICZtdGtfbWlwaV90eF9vcHMpOwor CWlmIChJU19FUlIocGh5KSkgeworCQlyZXQgPSBQVFJfRVJSKHBoeSk7CisJCWRldl9lcnIoZGV2 LCAiRmFpbGVkIHRvIGNyZWF0ZSBNSVBJIEQtUEhZOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJl dDsKKwl9CisJcGh5X3NldF9kcnZkYXRhKHBoeSwgbWlwaV90eCk7CisKKwlwaHlfcHJvdmlkZXIg PSBkZXZtX29mX3BoeV9wcm92aWRlcl9yZWdpc3RlcihkZXYsIG9mX3BoeV9zaW1wbGVfeGxhdGUp OworCWlmIChJU19FUlIocGh5KSkgeworCQlyZXQgPSBQVFJfRVJSKHBoeV9wcm92aWRlcik7CisJ CXJldHVybiByZXQ7CisJfQorCisJbWlwaV90eC0+ZGV2ID0gZGV2OworCisJcmV0dXJuIG9mX2Ns a19hZGRfcHJvdmlkZXIoZGV2LT5vZl9ub2RlLCBvZl9jbGtfc3JjX3NpbXBsZV9nZXQsCisJCQkJ ICAgbWlwaV90eC0+cGxsKTsKK30KKworc3RhdGljIGludCBtdGtfbWlwaV90eF9yZW1vdmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlvZl9jbGtfZGVsX3Byb3ZpZGVyKHBkZXYt PmRldi5vZl9ub2RlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9k ZXZpY2VfaWQgbXRrX21pcGlfdHhfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlh dGVrLG10ODE3My1taXBpLXR4IiwgfSwKKwl7fSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2 ZXIgbXRrX21pcGlfdHhfZHJpdmVyID0geworCS5wcm9iZSA9IG10a19taXBpX3R4X3Byb2JlLAor CS5yZW1vdmUgPSBtdGtfbWlwaV90eF9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAi bWVkaWF0ZWstbWlwaS10eCIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19taXBpX3R4X21hdGNo LAorCX0sCit9OwotLSAKMi44LjAucmMzCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWwK