From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philipp Zabel Subject: [PATCH v8 03/13] drm/mediatek: Add DSI sub driver Date: Mon, 4 Jan 2016 18:36:35 +0100 Message-ID: <1451929005-16372-4-git-send-email-p.zabel@pengutronix.de> References: <1451929005-16372-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: <1451929005-16372-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 , 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 , Stephen Boyd , Tomasz Figa , Kumar Gala List-Id: devicetree@vger.kernel.org RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkIGEgZHJtIGVu Y29kZXIvY29ubmVjdG9yIGRyaXZlciBmb3IgdGhlIE1JUEkgRFNJIGZ1bmN0aW9uCmJsb2NrIG9m IHRoZSBNZWRpYXRlayBkaXNwbGF5IHN1YnN5c3RlbSBhbmQgYSBwaHkgZHJpdmVyIGZvciB0aGUg TUlQSSBUWApELVBIWSBjb250cm9sIG1vZHVsZS4KClNpZ25lZC1vZmYtYnk6IEppdGFvIFNoaSA8 aml0YW8uc2hpQG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJlbCA8cC56 YWJlbEBwZW5ndXRyb25peC5kZT4KLS0tCkNoYW5nZXMgc2luY2Ugdjc6CiAtIFNlbGVjdCB0aGUg UEFORUwgYW5kIE1JUElfRFNJIGNvbmZpZyBvcHRpb25zCiAtIFNlcGFyYXRlIGVuYWJsaW5nIE1J UEkgVFggcGh5IG91dHB1dCBmcm9tIGVuYWJsaW5nIHRoZSBQTEwKIC0gTWFrZSB0aGUgUExMIGNv bnRyb2xsYWJsZSB2aWEgdGhlIGNvbW1vbiBjbG9jayBmcmFtZXdvcmsgdmlhCiAgIHRoZSBELVBI WSdzIGhpZ2gtc3BlZWQgY2xvY2sgb3V0cHV0IHRvIHRoZSBEU0kgZW5jb2RlcgotLS0KIGRyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnICAgICAgIHwgICAzICsKIGRyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9NYWtlZmlsZSAgICAgIHwgICA0ICstCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2RybV9kcnYuYyB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9kcnYuaCB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5jICAgICB8 IDg0NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHNpLmggICAgIHwgIDU4ICsrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19taXBpX3R4LmMgfCA0ODcgKysrKysrKysrKysrKysrKysrKwogNyBmaWxlcyBjaGFuZ2Vk LCAxNDAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kc2kuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbWlwaV90eC5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZp ZwppbmRleCA4ZGFkODkyLi5iN2UwNDA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZwpAQCAt Myw2ICszLDkgQEAgY29uZmlnIERSTV9NRURJQVRFSwogCWRlcGVuZHMgb24gRFJNCiAJZGVwZW5k cyBvbiBBUkNIX01FRElBVEVLIHx8IChBUk0gJiYgQ09NUElMRV9URVNUKQogCXNlbGVjdCBEUk1f S01TX0hFTFBFUgorCXNlbGVjdCBEUk1fTUlQSV9EU0kKKwlzZWxlY3QgRFJNX1BBTkVMCisJc2Vs ZWN0IERSTV9QQU5FTF9TSU1QTEUKIAlzZWxlY3QgSU9NTVVfRE1BCiAJc2VsZWN0IE1US19TTUkK IAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgYi9k cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKaW5kZXggYzdjYzQxYS4uZTFhNDBmNCAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQpAQCAtNSw2ICs1LDggQEAgbWVkaWF0ZWstZHJt LXkgOj0gbXRrX2Rpc3Bfb3ZsLm8gXAogCQkgIG10a19kcm1fZHJ2Lm8gXAogCQkgIG10a19kcm1f ZmIubyBcCiAJCSAgbXRrX2RybV9nZW0ubyBcCi0JCSAgbXRrX2RybV9wbGFuZS5vCisJCSAgbXRr X2RybV9wbGFuZS5vIFwKKwkJICBtdGtfZHNpLm8gXAorCQkgIG10a19taXBpX3R4Lm8KIAogb2Jq LSQoQ09ORklHX0RSTV9NRURJQVRFSykgKz0gbWVkaWF0ZWstZHJtLm8KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL21l ZGlhdGVrL210a19kcm1fZHJ2LmMKaW5kZXggOWRiMjJiNC4uMzkyNjdmOSAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMKQEAgLTUzNiw2ICs1MzYsOCBAQCBzdGF0aWMgc3Ry dWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZHJtX3BsYXRmb3JtX2RyaXZlciA9IHsKIHN0YXRpYyBz dHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICogY29uc3QgbXRrX2RybV9kcml2ZXJzW10gPSB7CiAJJm10 a19kcm1fcGxhdGZvcm1fZHJpdmVyLAogCSZtdGtfZGlzcF9vdmxfZHJpdmVyLAorCSZtdGtfZHNp X2RyaXZlciwKKwkmbXRrX21pcGlfdHhfZHJpdmVyLAogfTsKIAogc3RhdGljIGludCBfX2luaXQg bXRrX2RybV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCmlu ZGV4IDc1ZTFiN2QuLmU4NmMxOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9tdGtfZHJtX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Ry di5oCkBAIC00OCw1ICs0OCw3IEBAIHN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgewogfTsKIAogZXh0 ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2Rpc3Bfb3ZsX2RyaXZlcjsKK2V4dGVybiBz dHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kc2lfZHJpdmVyOworZXh0ZXJuIHN0cnVjdCBwbGF0 Zm9ybV9kcml2ZXIgbXRrX21pcGlfdHhfZHJpdmVyOwogCiAjZW5kaWYgLyogTVRLX0RSTV9EUlZf SCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kc2kuYyBiL2Ry aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uNmFiNWEzMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHNpLmMKQEAgLTAsMCArMSw4NDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp IDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICog cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4K KyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4KKyNp bmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5j bHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+CisjaW5j bHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2Rl Lmg+CisKKyNpbmNsdWRlICJtdGtfZHNpLmgiCisKKyNkZWZpbmUgRFNJX1ZJREVPX0ZJRk9fREVQ VEgJKDE5MjAgLyA0KQorI2RlZmluZSBEU0lfSE9TVF9GSUZPX0RFUFRICTY0CisKKyNkZWZpbmUg RFNJX1NUQVJUCQkweDAwCisKKyNkZWZpbmUgRFNJX0NPTl9DVFJMCQkweDEwCisjZGVmaW5lIERT SV9SRVNFVAkJCUJJVCgwKQorI2RlZmluZSBEU0lfRU4JCQkJQklUKDEpCisKKyNkZWZpbmUgRFNJ X01PREVfQ1RSTAkJMHgxNAorI2RlZmluZSBNT0RFCQkJCSgzKQorI2RlZmluZSBDTURfTU9ERQkJ CTAKKyNkZWZpbmUgU1lOQ19QVUxTRV9NT0RFCQkJMQorI2RlZmluZSBTWU5DX0VWRU5UX01PREUJ CQkyCisjZGVmaW5lIEJVUlNUX01PREUJCQkzCisjZGVmaW5lIEZSTV9NT0RFCQkJQklUKDE2KQor I2RlZmluZSBNSVhfTU9ERQkJCUJJVCgxNykKKworI2RlZmluZSBEU0lfVFhSWF9DVFJMCQkweDE4 CisjZGVmaW5lIFZDX05VTQkJCQkoMiA8PCAwKQorI2RlZmluZSBMQU5FX05VTQkJCSgweGYgPDwg MikKKyNkZWZpbmUgRElTX0VPVAkJCQlCSVQoNikKKyNkZWZpbmUgTlVMTF9FTgkJCQlCSVQoNykK KyNkZWZpbmUgVEVfRlJFRVJVTgkJCUJJVCg4KQorI2RlZmluZSBFWFRfVEVfRU4JCQlCSVQoOSkK KyNkZWZpbmUgRVhUX1RFX0VER0UJCQlCSVQoMTApCisjZGVmaW5lIE1BWF9SVE5fU0laRQkJCSgw eGYgPDwgMTIpCisjZGVmaW5lIEhTVFhfQ0tMUF9FTgkJCUJJVCgxNikKKworI2RlZmluZSBEU0lf UFNDVFJMCQkweDFjCisjZGVmaW5lIERTSV9QU19XQwkJCTB4M2ZmZgorI2RlZmluZSBEU0lfUFNf U0VMCQkJKDMgPDwgMTYpCisjZGVmaW5lIFBBQ0tFRF9QU18xNkJJVF9SR0I1NjUJCSgwIDw8IDE2 KQorI2RlZmluZSBMT09TRUxZX1BTXzE4QklUX1JHQjY2NgkJKDEgPDwgMTYpCisjZGVmaW5lIFBB Q0tFRF9QU18xOEJJVF9SR0I2NjYJCSgyIDw8IDE2KQorI2RlZmluZSBQQUNLRURfUFNfMjRCSVRf UkdCODg4CQkoMyA8PCAxNikKKworI2RlZmluZSBEU0lfVlNBX05MCQkweDIwCisjZGVmaW5lIERT SV9WQlBfTkwJCTB4MjQKKyNkZWZpbmUgRFNJX1ZGUF9OTAkJMHgyOAorI2RlZmluZSBEU0lfVkFD VF9OTAkJMHgyQworI2RlZmluZSBEU0lfSFNBX1dDCQkweDUwCisjZGVmaW5lIERTSV9IQlBfV0MJ CTB4NTQKKyNkZWZpbmUgRFNJX0hGUF9XQwkJMHg1OAorCisjZGVmaW5lIERTSV9IU1RYX0NLTF9X QwkJMHg2NAorCisjZGVmaW5lIERTSV9QSFlfTENDT04JCTB4MTA0CisjZGVmaW5lIExDX0hTX1RY X0VOCQkJQklUKDApCisjZGVmaW5lIExDX1VMUE1fRU4JCQlCSVQoMSkKKyNkZWZpbmUgTENfV0FL RVVQX0VOCQkJQklUKDIpCisKKyNkZWZpbmUgRFNJX1BIWV9MRDBDT04JCTB4MTA4CisjZGVmaW5l IExEMF9IU19UWF9FTgkJCUJJVCgwKQorI2RlZmluZSBMRDBfVUxQTV9FTgkJCUJJVCgxKQorI2Rl ZmluZSBMRDBfV0FLRVVQX0VOCQkJQklUKDIpCisKKyNkZWZpbmUgRFNJX1BIWV9USU1FQ09OMAkw eDExMAorI2RlZmluZSBMUFgJCQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgSFNfUFJQUgkJCQkoMHhm ZiA8PCA4KQorI2RlZmluZSBIU19aRVJPCQkJCSgweGZmIDw8IDE2KQorI2RlZmluZSBIU19UUkFJ TAkJCSgweGZmIDw8IDI0KQorCisjZGVmaW5lIERTSV9QSFlfVElNRUNPTjEJMHgxMTQKKyNkZWZp bmUgVEFfR08JCQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgVEFfU1VSRQkJCQkoMHhmZiA8PCA4KQor I2RlZmluZSBUQV9HRVQJCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lIERBX0hTX0VYSVQJCQkoMHhm ZiA8PCAyNCkKKworI2RlZmluZSBEU0lfUEhZX1RJTUVDT04yCTB4MTE4CisjZGVmaW5lIENPTlRf REVUCQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgQ0xLX1pFUk8JCQkoMHhmZiA8PCAxNikKKyNkZWZp bmUgQ0xLX1RSQUlMCQkJKDB4ZmYgPDwgMjQpCisKKyNkZWZpbmUgRFNJX1BIWV9USU1FQ09OMwkw eDExYworI2RlZmluZSBDTEtfSFNfUFJQUgkJCSgweGZmIDw8IDApCisjZGVmaW5lIENMS19IU19Q T1NUCQkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUgQ0xLX0hTX0VYSVQJCQkoMHhmZiA8PCAxNikKKwor I2RlZmluZSBOU19UT19DWUNMRShuLCBjKSAgICAoKG4pIC8gYyArICgoKG4pICUgYykgPyAxIDog MCkpCisKK3N0YXRpYyB2b2lkIG10a19kc2lfbWFzayhzdHJ1Y3QgbXRrX2RzaSAqZHNpLCB1MzIg b2Zmc2V0LCB1MzIgbWFzaywgdTMyIGRhdGEpCit7CisJdTMyIHRlbXAgPSByZWFkbChkc2ktPnJl Z3MgKyBvZmZzZXQpOworCisJd3JpdGVsKCh0ZW1wICYgfm1hc2spIHwgKGRhdGEgJiBtYXNrKSwg ZHNpLT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgZHNpX3BoeV90aW1jb25maWco c3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwl1MzIgdGltY29uMCwgdGltY29uMSwgdGltY29uMiwg dGltY29uMzsKKwl1bnNpZ25lZCBpbnQgdWksIGN5Y2xlX3RpbWU7CisJdW5zaWduZWQgaW50IGxw eDsKKworCXVpID0gMTAwMCAvIGRzaS0+ZGF0YV9yYXRlICsgMHgwMTsKKwljeWNsZV90aW1lID0g ODAwMCAvIGRzaS0+ZGF0YV9yYXRlICsgMHgwMTsKKwlscHggPSA1OworCisJdGltY29uMCA9ICg4 IDw8IDI0KSB8ICgweGEgPDwgMTYpIHwgKDB4NiA8PCA4KSB8IGxweDsKKwl0aW1jb24xID0gKDcg PDwgMjQpIHwgKDUgKiBscHggPDwgMTYpIHwgKCgzICogbHB4KSAvIDIpIDw8IDggfAorCQkgICg0 ICogbHB4KTsKKwl0aW1jb24yID0gKChOU19UT19DWUNMRSgweDY0LCBjeWNsZV90aW1lKSArIDB4 YSkgPDwgMjQpIHwKKwkJICAoTlNfVE9fQ1lDTEUoMHgxNTAsIGN5Y2xlX3RpbWUpIDw8IDE2KTsK Kwl0aW1jb24zID0gKDIgKiBscHgpIDw8IDE2IHwgTlNfVE9fQ1lDTEUoODAgKyA1MiAqIHVpLCBj eWNsZV90aW1lKSA8PCA4IHwKKwkJICAgTlNfVE9fQ1lDTEUoMHg0MCwgY3ljbGVfdGltZSk7CisK Kwl3cml0ZWwodGltY29uMCwgZHNpLT5yZWdzICsgRFNJX1BIWV9USU1FQ09OMCk7CisJd3JpdGVs KHRpbWNvbjEsIGRzaS0+cmVncyArIERTSV9QSFlfVElNRUNPTjEpOworCXdyaXRlbCh0aW1jb24y LCBkc2ktPnJlZ3MgKyBEU0lfUEhZX1RJTUVDT04yKTsKKwl3cml0ZWwodGltY29uMywgZHNpLT5y ZWdzICsgRFNJX1BIWV9USU1FQ09OMyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfZW5hYmxl KHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX0NPTl9DVFJM LCBEU0lfRU4sIERTSV9FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfZGlzYWJsZShzdHJ1 Y3QgbXRrX2RzaSAqZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERTSV9DT05fQ1RSTCwgRFNJ X0VOLCAwKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9yZXNldChzdHJ1Y3QgbXRrX2RzaSAq ZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERTSV9DT05fQ1RSTCwgRFNJX1JFU0VULCBEU0lf UkVTRVQpOworCW10a19kc2lfbWFzayhkc2ksIERTSV9DT05fQ1RSTCwgRFNJX1JFU0VULCAwKTsK K30KKworc3RhdGljIGludCBtdGtfZHNpX3Bvd2Vyb24oc3RydWN0IG10a19kc2kgKmRzaSkKK3sK KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRldjsKKwlpbnQgcmV0OworCisJaWYgKCsrZHNp LT5yZWZjb3VudCAhPSAxKQorCQlyZXR1cm4gMDsKKworCS8qKgorCSAqIGRhdGFfcmF0ZSA9IChw aXhlbF9jbG9jayAvIDEwMDApICogcGl4ZWxfZGlwdGggKiBtaXBpX3JhdGlvOworCSAqIHBpeGVs X2Nsb2NrIHVuaXQgaXMgS2h6LCBkYXRhX3JhdGEgdW5pdCBpcyBNSHosIHNvIG5lZWQgZGl2aWRl IDEwMDAuCisJICogbWlwaV9yYXRpbyBpcyBtaXBpIGNsayBjb2VmZmljaWVudCBmb3IgYmFsYW5j ZSB0aGUgcGl4ZWwgY2xrIGluIG1pcGkuCisJICogd2Ugc2V0IG1pcGlfcmF0aW8gaXMgMS4wNS4K KwkgKi8KKwlkc2ktPmRhdGFfcmF0ZSA9IGRzaS0+dm0ucGl4ZWxjbG9jayAqIDMgKiAyMSAvICgx ICogMTAwMCAqIDEwKTsKKworCXJldCA9IGNsa19zZXRfcmF0ZShkc2ktPmhzX2NsaywgZHNpLT5k YXRhX3JhdGUgKiAxMDAwMDAwKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2VycihkZXYsICJGYWls ZWQgdG8gc2V0IGRhdGEgcmF0ZTogJWRcbiIsIHJldCk7CisKKwlwaHlfcG93ZXJfb24oZHNpLT5w aHkpOworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+ZW5naW5lX2Nsayk7CisJaWYg KHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIGVuZ2luZSBjbG9j azogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2VuZ2luZV9jbGs7CisJfQorCisJcmV0ID0gY2xr X3ByZXBhcmVfZW5hYmxlKGRzaS0+ZGlnaXRhbF9jbGspOworCWlmIChyZXQgPCAwKSB7CisJCWRl dl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBkaWdpdGFsIGNsb2NrOiAlZFxuIiwgcmV0KTsK KwkJZ290byBlcnJfZGlnaXRhbF9jbGs7CisJfQorCisJbXRrX2RzaV9lbmFibGUoZHNpKTsKKwlt dGtfZHNpX3Jlc2V0KGRzaSk7CisJZHNpX3BoeV90aW1jb25maWcoZHNpKTsKKworCXJldHVybiAw OworCitlcnJfZGlnaXRhbF9jbGs6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+ZW5naW5l X2Nsayk7CitlcnJfZW5naW5lX2NsazoKKwlkc2ktPnJlZmNvdW50LS07CisJcmV0dXJuIHJldDsK K30KKworc3RhdGljIHZvaWQgZHNpX2Nsa191bHBfbW9kZV9lbnRlcihzdHJ1Y3QgbXRrX2RzaSAq ZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04sIExDX0hTX1RYX0VOLCAw KTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xDQ09OLCBMQ19VTFBNX0VOLCAwKTsKK30K Kworc3RhdGljIHZvaWQgZHNpX2Nsa191bHBfbW9kZV9sZWF2ZShzdHJ1Y3QgbXRrX2RzaSAqZHNp KQoreworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04sIExDX1VMUE1fRU4sIDApOwor CW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04sIExDX1dBS0VVUF9FTiwgTENfV0FLRVVQ X0VOKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xDQ09OLCBMQ19XQUtFVVBfRU4sIDAp OworfQorCitzdGF0aWMgdm9pZCBkc2lfbGFuZTBfdWxwX21vZGVfZW50ZXIoc3RydWN0IG10a19k c2kgKmRzaSkKK3sKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xEMENPTiwgTEQwX0hTX1RY X0VOLCAwKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xEMENPTiwgTEQwX1VMUE1fRU4s IDApOworfQorCitzdGF0aWMgdm9pZCBkc2lfbGFuZTBfdWxwX21vZGVfbGVhdmUoc3RydWN0IG10 a19kc2kgKmRzaSkKK3sKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xEMENPTiwgTEQwX1VM UE1fRU4sIDApOworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTEQwQ09OLCBMRDBfV0FLRVVQ X0VOLCBMRDBfV0FLRVVQX0VOKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xEMENPTiwg TEQwX1dBS0VVUF9FTiwgMCk7Cit9CisKK3N0YXRpYyBib29sIGRzaV9jbGtfaHNfc3RhdGUoc3Ry dWN0IG10a19kc2kgKmRzaSkKK3sKKwl1MzIgdG1wX3JlZzE7CisKKwl0bXBfcmVnMSA9IHJlYWRs KGRzaS0+cmVncyArIERTSV9QSFlfTENDT04pOworCXJldHVybiAoKHRtcF9yZWcxICYgTENfSFNf VFhfRU4pID09IDEpID8gdHJ1ZSA6IGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBkc2lfY2xrX2hz X21vZGUoc3RydWN0IG10a19kc2kgKmRzaSwgYm9vbCBlbnRlcikKK3sKKwlpZiAoZW50ZXIgJiYg IWRzaV9jbGtfaHNfc3RhdGUoZHNpKSkKKwkJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MQ0NP TiwgTENfSFNfVFhfRU4sIExDX0hTX1RYX0VOKTsKKwllbHNlIGlmICghZW50ZXIgJiYgZHNpX2Ns a19oc19zdGF0ZShkc2kpKQorCQltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xDQ09OLCBMQ19I U19UWF9FTiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9zZXRfbW9kZShzdHJ1Y3QgbXRrX2Rz aSAqZHNpKQoreworCXUzMiB2aWRfbW9kZSA9IENNRF9NT0RFOworCisJaWYgKGRzaS0+bW9kZV9m bGFncyAmIE1JUElfRFNJX01PREVfVklERU8pIHsKKwkJdmlkX21vZGUgPSBTWU5DX1BVTFNFX01P REU7CisKKwkJaWYgKChkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX0JVUlNU KSAmJgorCQkgICAgIShkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNf UFVMU0UpKQorCQkJdmlkX21vZGUgPSBCVVJTVF9NT0RFOworCX0KKworCXdyaXRlbCh2aWRfbW9k ZSwgZHNpLT5yZWdzICsgRFNJX01PREVfQ1RSTCk7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9wc19j b250cm9sX3ZhY3Qoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlzdHJ1Y3QgdmlkZW9tb2RlICp2 bSA9ICZkc2ktPnZtOworCXUzMiBkc2lfYnVmX2JwcCwgcHNfd2M7CisJdTMyIHBzX2JwcF9tb2Rl OworCisJaWYgKGRzaS0+Zm9ybWF0ID09IE1JUElfRFNJX0ZNVF9SR0I1NjUpCisJCWRzaV9idWZf YnBwID0gMjsKKwllbHNlCisJCWRzaV9idWZfYnBwID0gMzsKKworCXBzX3djID0gdm0tPmhhY3Rp dmUgKiBkc2lfYnVmX2JwcDsKKwlwc19icHBfbW9kZSA9IHBzX3djOworCisJc3dpdGNoIChkc2kt PmZvcm1hdCkgeworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjg4ODoKKwkJcHNfYnBwX21vZGUgfD0g UEFDS0VEX1BTXzI0QklUX1JHQjg4ODsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdC NjY2OgorCQlwc19icHBfbW9kZSB8PSBQQUNLRURfUFNfMThCSVRfUkdCNjY2OworCQlicmVhazsK KwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjZfUEFDS0VEOgorCQlwc19icHBfbW9kZSB8PSBMT09T RUxZX1BTXzE4QklUX1JHQjY2NjsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNTY1 OgorCQlwc19icHBfbW9kZSB8PSBQQUNLRURfUFNfMTZCSVRfUkdCNTY1OworCQlicmVhazsKKwl9 CisKKwl3cml0ZWwodm0tPnZhY3RpdmUsIGRzaS0+cmVncyArIERTSV9WQUNUX05MKTsKKwl3cml0 ZWwocHNfYnBwX21vZGUsIGRzaS0+cmVncyArIERTSV9QU0NUUkwpOworCXdyaXRlbChwc193Yywg ZHNpLT5yZWdzICsgRFNJX0hTVFhfQ0tMX1dDKTsKK30KKworc3RhdGljIHZvaWQgZHNpX3J4dHhf Y29udHJvbChzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXUzMiB0bXBfcmVnOworCisJc3dpdGNo IChkc2ktPmxhbmVzKSB7CisJY2FzZSAxOgorCQl0bXBfcmVnID0gMSA8PCAyOworCQlicmVhazsK KwljYXNlIDI6CisJCXRtcF9yZWcgPSAzIDw8IDI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJdG1w X3JlZyA9IDcgPDwgMjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQl0bXBfcmVnID0gMHhmIDw8IDI7 CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXRtcF9yZWcgPSAweGYgPDwgMjsKKwkJYnJlYWs7CisJ fQorCisJd3JpdGVsKHRtcF9yZWcsIGRzaS0+cmVncyArIERTSV9UWFJYX0NUUkwpOworfQorCitz dGF0aWMgdm9pZCBkc2lfcHNfY29udHJvbChzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXVuc2ln bmVkIGludCBkc2lfdG1wX2J1Zl9icHA7CisJdTMyIHRtcF9yZWc7CisKKwlzd2l0Y2ggKGRzaS0+ Zm9ybWF0KSB7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCODg4OgorCQl0bXBfcmVnID0gUEFDS0VE X1BTXzI0QklUX1JHQjg4ODsKKwkJZHNpX3RtcF9idWZfYnBwID0gMzsKKwkJYnJlYWs7CisJY2Fz ZSBNSVBJX0RTSV9GTVRfUkdCNjY2OgorCQl0bXBfcmVnID0gTE9PU0VMWV9QU18xOEJJVF9SR0I2 NjY7CisJCWRzaV90bXBfYnVmX2JwcCA9IDM7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRk1U X1JHQjY2Nl9QQUNLRUQ6CisJCXRtcF9yZWcgPSBQQUNLRURfUFNfMThCSVRfUkdCNjY2OworCQlk c2lfdG1wX2J1Zl9icHAgPSAzOworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I1NjU6 CisJCXRtcF9yZWcgPSBQQUNLRURfUFNfMTZCSVRfUkdCNTY1OworCQlkc2lfdG1wX2J1Zl9icHAg PSAyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl0bXBfcmVnID0gUEFDS0VEX1BTXzI0QklUX1JH Qjg4ODsKKwkJZHNpX3RtcF9idWZfYnBwID0gMzsKKwkJYnJlYWs7CisJfQorCisJdG1wX3JlZyAr PSBkc2ktPnZtLmhhY3RpdmUgKiBkc2lfdG1wX2J1Zl9icHAgJiBEU0lfUFNfV0M7CisJd3JpdGVs KHRtcF9yZWcsIGRzaS0+cmVncyArIERTSV9QU0NUUkwpOworfQorCitzdGF0aWMgdm9pZCBkc2lf Y29uZmlnX3Zkb190aW1pbmcoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwl1bnNpZ25lZCBpbnQg aG9yaXpvbnRhbF9zeW5jX2FjdGl2ZV9ieXRlOworCXVuc2lnbmVkIGludCBob3Jpem9udGFsX2Jh Y2twb3JjaF9ieXRlOworCXVuc2lnbmVkIGludCBob3Jpem9udGFsX2Zyb250cG9yY2hfYnl0ZTsK Kwl1bnNpZ25lZCBpbnQgZHNpX3RtcF9idWZfYnBwOworCisJc3RydWN0IHZpZGVvbW9kZSAqdm0g PSAmZHNpLT52bTsKKworCWlmIChkc2ktPmZvcm1hdCA9PSBNSVBJX0RTSV9GTVRfUkdCNTY1KQor CQlkc2lfdG1wX2J1Zl9icHAgPSAyOworCWVsc2UKKwkJZHNpX3RtcF9idWZfYnBwID0gMzsKKwor CXdyaXRlbCh2bS0+dnN5bmNfbGVuLCBkc2ktPnJlZ3MgKyBEU0lfVlNBX05MKTsKKwl3cml0ZWwo dm0tPnZiYWNrX3BvcmNoLCBkc2ktPnJlZ3MgKyBEU0lfVkJQX05MKTsKKwl3cml0ZWwodm0tPnZm cm9udF9wb3JjaCwgZHNpLT5yZWdzICsgRFNJX1ZGUF9OTCk7CisJd3JpdGVsKHZtLT52YWN0aXZl LCBkc2ktPnJlZ3MgKyBEU0lfVkFDVF9OTCk7CisKKwlob3Jpem9udGFsX3N5bmNfYWN0aXZlX2J5 dGUgPSAodm0tPmhzeW5jX2xlbiAqIGRzaV90bXBfYnVmX2JwcCAtIDEwKTsKKworCWlmIChkc2kt Pm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpCisJCWhvcml6b250 YWxfYmFja3BvcmNoX2J5dGUgPQorCQkJKHZtLT5oYmFja19wb3JjaCAqIGRzaV90bXBfYnVmX2Jw cCAtIDEwKTsKKwllbHNlCisJCWhvcml6b250YWxfYmFja3BvcmNoX2J5dGUgPSAoKHZtLT5oYmFj a19wb3JjaCArIHZtLT5oc3luY19sZW4pICoKKwkJCWRzaV90bXBfYnVmX2JwcCAtIDEwKTsKKwor CWhvcml6b250YWxfZnJvbnRwb3JjaF9ieXRlID0gKHZtLT5oZnJvbnRfcG9yY2ggKiBkc2lfdG1w X2J1Zl9icHAgLSAxMik7CisKKwl3cml0ZWwoaG9yaXpvbnRhbF9zeW5jX2FjdGl2ZV9ieXRlLCBk c2ktPnJlZ3MgKyBEU0lfSFNBX1dDKTsKKwl3cml0ZWwoaG9yaXpvbnRhbF9iYWNrcG9yY2hfYnl0 ZSwgZHNpLT5yZWdzICsgRFNJX0hCUF9XQyk7CisJd3JpdGVsKGhvcml6b250YWxfZnJvbnRwb3Jj aF9ieXRlLCBkc2ktPnJlZ3MgKyBEU0lfSEZQX1dDKTsKKworCWRzaV9wc19jb250cm9sKGRzaSk7 Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfc3RhcnQoc3RydWN0IG10a19kc2kgKmRzaSkKK3sK Kwl3cml0ZWwoMCwgZHNpLT5yZWdzICsgRFNJX1NUQVJUKTsKKwl3cml0ZWwoMSwgZHNpLT5yZWdz ICsgRFNJX1NUQVJUKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9wb3dlcm9mZihzdHJ1Y3Qg bXRrX2RzaSAqZHNpKQoreworCWlmIChXQVJOX09OKGRzaS0+cmVmY291bnQgPT0gMCkpCisJCXJl dHVybjsKKworCWlmICgtLWRzaS0+cmVmY291bnQgIT0gMCkKKwkJcmV0dXJuOworCisJZHNpX2xh bmUwX3VscF9tb2RlX2VudGVyKGRzaSk7CisJZHNpX2Nsa191bHBfbW9kZV9lbnRlcihkc2kpOwor CisJbXRrX2RzaV9kaXNhYmxlKGRzaSk7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5l bmdpbmVfY2xrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5kaWdpdGFsX2Nsayk7CisK KwlwaHlfcG93ZXJfb2ZmKGRzaS0+cGh5KTsKK30KKworc3RhdGljIHZvaWQgbXRrX291dHB1dF9k c2lfZW5hYmxlKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJaW50IHJldDsKKworCWlmIChkc2kt PmVuYWJsZWQpCisJCXJldHVybjsKKworCWlmIChkc2ktPnBhbmVsKSB7CisJCWlmIChkcm1fcGFu ZWxfcHJlcGFyZShkc2ktPnBhbmVsKSkgeworCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gc2V0dXAg dGhlIHBhbmVsXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCXJldCA9IG10a19kc2lfcG93 ZXJvbihkc2kpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBvd2Vy IG9uIGRzaVxuIik7CisJCXJldHVybjsKKwl9CisKKwlkc2lfcnh0eF9jb250cm9sKGRzaSk7CisK Kwlkc2lfY2xrX3VscF9tb2RlX2xlYXZlKGRzaSk7CisJZHNpX2xhbmUwX3VscF9tb2RlX2xlYXZl KGRzaSk7CisJZHNpX2Nsa19oc19tb2RlKGRzaSwgMCk7CisJZHNpX3NldF9tb2RlKGRzaSk7CisK Kwlkc2lfcHNfY29udHJvbF92YWN0KGRzaSk7CisJZHNpX2NvbmZpZ192ZG9fdGltaW5nKGRzaSk7 CisKKwlkc2lfc2V0X21vZGUoZHNpKTsKKwlkc2lfY2xrX2hzX21vZGUoZHNpLCAxKTsKKworCW10 a19kc2lfc3RhcnQoZHNpKTsKKworCWRzaS0+ZW5hYmxlZCA9IHRydWU7Cit9CisKK3N0YXRpYyB2 b2lkIG10a19vdXRwdXRfZHNpX2Rpc2FibGUoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlpZiAo IWRzaS0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWYgKGRzaS0+cGFuZWwpIHsKKwkJaWYgKGRy bV9wYW5lbF9kaXNhYmxlKGRzaS0+cGFuZWwpKSB7CisJCQlEUk1fRVJST1IoImZhaWxlZCB0byBk aXNhYmxlIHRoZSBwYW5lbFxuIik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwltdGtfZHNpX3Bv d2Vyb2ZmKGRzaSk7CisKKwlkc2ktPmVuYWJsZWQgPSBmYWxzZTsKK30KKworc3RhdGljIHZvaWQg bXRrX2RzaV9lbmNvZGVyX2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQorewor CWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX2VuY29kZXJfZnVuY3MgbXRrX2RzaV9lbmNvZGVyX2Z1bmNzID0geworCS5kZXN0cm95ID0g bXRrX2RzaV9lbmNvZGVyX2Rlc3Ryb3ksCit9OworCitzdGF0aWMgYm9vbCBtdGtfZHNpX2VuY29k ZXJfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICAgICAgIGNv bnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSAgICAgICBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3Rh dGljIHZvaWQgbXRrX2RzaV9lbmNvZGVyX21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5j b2RlciwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSAgICAg c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkKQoreworCXN0cnVjdCBtdGtfZHNpICpk c2kgPSBlbmNvZGVyX3RvX2RzaShlbmNvZGVyKTsKKworCWRzaS0+dm0ucGl4ZWxjbG9jayA9IGFk anVzdGVkLT5jbG9jazsKKwlkc2ktPnZtLmhhY3RpdmUgPSBhZGp1c3RlZC0+aGRpc3BsYXk7CisJ ZHNpLT52bS5oYmFja19wb3JjaCA9IGFkanVzdGVkLT5odG90YWwgLSBhZGp1c3RlZC0+aHN5bmNf ZW5kOworCWRzaS0+dm0uaGZyb250X3BvcmNoID0gYWRqdXN0ZWQtPmhzeW5jX3N0YXJ0IC0gYWRq dXN0ZWQtPmhkaXNwbGF5OworCWRzaS0+dm0uaHN5bmNfbGVuID0gYWRqdXN0ZWQtPmhzeW5jX2Vu ZCAtIGFkanVzdGVkLT5oc3luY19zdGFydDsKKworCWRzaS0+dm0udmFjdGl2ZSA9IGFkanVzdGVk LT52ZGlzcGxheTsKKwlkc2ktPnZtLnZiYWNrX3BvcmNoID0gYWRqdXN0ZWQtPnZ0b3RhbCAtIGFk anVzdGVkLT52c3luY19lbmQ7CisJZHNpLT52bS52ZnJvbnRfcG9yY2ggPSBhZGp1c3RlZC0+dnN5 bmNfc3RhcnQgLSBhZGp1c3RlZC0+dmRpc3BsYXk7CisJZHNpLT52bS52c3luY19sZW4gPSBhZGp1 c3RlZC0+dnN5bmNfZW5kIC0gYWRqdXN0ZWQtPnZzeW5jX3N0YXJ0OworfQorCitzdGF0aWMgdm9p ZCBtdGtfZHNpX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7 CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGVuY29kZXJfdG9fZHNpKGVuY29kZXIpOworCisJbXRr X291dHB1dF9kc2lfZGlzYWJsZShkc2kpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX2VuY29k ZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgbXRrX2Rz aSAqZHNpID0gZW5jb2Rlcl90b19kc2koZW5jb2Rlcik7CisKKwltdGtfb3V0cHV0X2RzaV9lbmFi bGUoZHNpKTsKK30KKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgbXRrX2RzaV9j b25uZWN0b3JfZGV0ZWN0KAorCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wg Zm9yY2UpCit7CisJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworfQorCitzdGF0 aWMgdm9pZCBtdGtfZHNpX2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IpCit7CisJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKGNvbm5lY3Rvcik7CisJZHJt X2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RzaV9j b25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJ c3RydWN0IG10a19kc2kgKmRzaSA9IGNvbm5lY3Rvcl90b19kc2koY29ubmVjdG9yKTsKKworCXJl dHVybiBkcm1fcGFuZWxfZ2V0X21vZGVzKGRzaS0+cGFuZWwpOworfQorCitzdGF0aWMgc3RydWN0 IGRybV9lbmNvZGVyICptdGtfZHNpX2Nvbm5lY3Rvcl9iZXN0X2VuY29kZXIoCisJCXN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGNvbm5l Y3Rvcl90b19kc2koY29ubmVjdG9yKTsKKworCXJldHVybiAmZHNpLT5lbmNvZGVyOworfQorCitz dGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyBtdGtfZHNpX2VuY29k ZXJfaGVscGVyX2Z1bmNzID0geworCS5tb2RlX2ZpeHVwID0gbXRrX2RzaV9lbmNvZGVyX21vZGVf Zml4dXAsCisJLm1vZGVfc2V0ID0gbXRrX2RzaV9lbmNvZGVyX21vZGVfc2V0LAorCS5kaXNhYmxl ID0gbXRrX2RzaV9lbmNvZGVyX2Rpc2FibGUsCisJLmVuYWJsZSA9IG10a19kc2lfZW5jb2Rlcl9l bmFibGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgbXRr X2RzaV9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRwbXMgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25u ZWN0b3JfZHBtcywKKwkuZGV0ZWN0ID0gbXRrX2RzaV9jb25uZWN0b3JfZGV0ZWN0LAorCS5maWxs X21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXN0 cm95ID0gbXRrX2RzaV9jb25uZWN0b3JfZGVzdHJveSwKKwkucmVzZXQgPSBkcm1fYXRvbWljX2hl bHBlcl9jb25uZWN0b3JfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRv bWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9z dGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLAorfTsKKwor c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcworCW10a19kc2lf Y29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0X21vZGVzID0gbXRrX2RzaV9jb25uZWN0 b3JfZ2V0X21vZGVzLAorCS5iZXN0X2VuY29kZXIgPSBtdGtfZHNpX2Nvbm5lY3Rvcl9iZXN0X2Vu Y29kZXIsCit9OworCitzdGF0aWMgaW50IG10a19kcm1fYXR0YWNoX2xjbV9icmlkZ2Uoc3RydWN0 IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl cikKK3sKKwlpbnQgcmV0OworCisJZW5jb2Rlci0+YnJpZGdlID0gYnJpZGdlOworCWJyaWRnZS0+ ZW5jb2RlciA9IGVuY29kZXI7CisJcmV0ID0gZHJtX2JyaWRnZV9hdHRhY2goZW5jb2Rlci0+ZGV2 LCBicmlkZ2UpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYXR0YWNoIGJy aWRnZSB0byBkcm1cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IG10a19kc2lfY3JlYXRlX2Nvbm5fZW5jKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0s IHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJaW50IHJldDsKKworCXJldCA9IGRybV9lbmNvZGVy X2luaXQoZHJtLCAmZHNpLT5lbmNvZGVyLCAmbXRrX2RzaV9lbmNvZGVyX2Z1bmNzLAorCQkJICAg ICAgIERSTV9NT0RFX0VOQ09ERVJfRFNJKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFp bGVkIHRvIGVuY29kZXIgaW5pdCB0byBkcm1cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlkcm1f ZW5jb2Rlcl9oZWxwZXJfYWRkKCZkc2ktPmVuY29kZXIsICZtdGtfZHNpX2VuY29kZXJfaGVscGVy X2Z1bmNzKTsKKworCWRzaS0+ZW5jb2Rlci5wb3NzaWJsZV9jcnRjcyA9IDE7CisKKwkvKiBQcmUt ZW1wdCBEUCBjb25uZWN0b3IgY3JlYXRpb24gaWYgdGhlcmUncyBhIGJyaWRnZSAqLworCXJldCA9 IG10a19kcm1fYXR0YWNoX2xjbV9icmlkZ2UoZHNpLT5icmlkZ2UsICZkc2ktPmVuY29kZXIpOwor CWlmICghcmV0KQorCQlyZXR1cm4gMDsKKworCXJldCA9IGRybV9jb25uZWN0b3JfaW5pdChkcm0s ICZkc2ktPmNvbm4sICZtdGtfZHNpX2Nvbm5lY3Rvcl9mdW5jcywKKwkJCQkgRFJNX01PREVfQ09O TkVDVE9SX0RTSSk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBjb25uZWN0 b3IgaW5pdCB0byBkcm1cbiIpOworCQlnb3RvIGVycmNvbm5lY3RvcjsKKwl9CisKKwlkcm1fY29u bmVjdG9yX2hlbHBlcl9hZGQoJmRzaS0+Y29ubiwgJm10a19kc2lfY29ubmVjdG9yX2hlbHBlcl9m dW5jcyk7CisKKwlyZXQgPSBkcm1fY29ubmVjdG9yX3JlZ2lzdGVyKCZkc2ktPmNvbm4pOworCWlm IChyZXQpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY29ubmVjdG9yIHJlZ2lzdGVyIHRvIGRy bVxuIik7CisJCWdvdG8gZXJyY29ubmVjdG9ycmVnOworCX0KKworCWRzaS0+Y29ubi5kcG1zID0g RFJNX01PREVfRFBNU19PRkY7CisJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZk c2ktPmNvbm4sICZkc2ktPmVuY29kZXIpOworCisJaWYgKGRzaS0+cGFuZWwpIHsKKwkJcmV0ID0g ZHJtX3BhbmVsX2F0dGFjaChkc2ktPnBhbmVsLCAmZHNpLT5jb25uKTsKKwkJaWYgKHJldCkgewor CQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYXR0YWN0IHBhbmVsIHRvIGRybVxuIik7CisJCQlyZXR1 cm4gcmV0OworCQl9CisJfQorCXJldHVybiAwOworCitlcnJjb25uZWN0b3I6CisJZHJtX2VuY29k ZXJfY2xlYW51cCgmZHNpLT5lbmNvZGVyKTsKK2VycmNvbm5lY3RvcnJlZzoKKwlkcm1fY29ubmVj dG9yX2NsZWFudXAoJmRzaS0+Y29ubik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9p ZCBtdGtfZHNpX2Rlc3Ryb3lfY29ubl9lbmMoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlkcm1f ZW5jb2Rlcl9jbGVhbnVwKCZkc2ktPmVuY29kZXIpOworCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rl cigmZHNpLT5jb25uKTsKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoJmRzaS0+Y29ubik7Cit9CisK K3N0YXRpYyB2b2lkIG10a19kc2lfZGRwX3N0YXJ0KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAp Cit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3QgbXRr X2RzaSwgZGRwX2NvbXApOworCisJbXRrX2RzaV9wb3dlcm9uKGRzaSk7Cit9CisKK3N0YXRpYyB2 b2lkIG10a19kc2lfZGRwX3N0b3Aoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlzdHJ1 Y3QgbXRrX2RzaSAqZHNpID0gY29udGFpbmVyX29mKGNvbXAsIHN0cnVjdCBtdGtfZHNpLCBkZHBf Y29tcCk7CisKKwltdGtfZHNpX3Bvd2Vyb2ZmKGRzaSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIG10a19kc2lfZnVuY3MgPSB7CisJLnN0YXJ0ID0gbXRrX2Rz aV9kZHBfc3RhcnQsCisJLnN0b3AgPSBtdGtfZHNpX2RkcF9zdG9wLAorfTsKKworc3RhdGljIGlu dCBtdGtfZHNpX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIs IHZvaWQgKmRhdGEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGF0 YTsKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXQg PSBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoZHJtLCAmZHNpLT5kZHBfY29tcCk7CisJaWYgKHJldCA8 IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29tcG9uZW50ICVzOiAl ZFxuIiwKKwkJCWRldi0+b2Zfbm9kZS0+ZnVsbF9uYW1lLCByZXQpOworCQlyZXR1cm4gcmV0Owor CX0KKworCXJldCA9IG10a19kc2lfY3JlYXRlX2Nvbm5fZW5jKGRybSwgZHNpKTsKKwlpZiAocmV0 KSB7CisJCURSTV9FUlJPUigiRW5jb2RlciBjcmVhdGUgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7 CisJCWdvdG8gZXJyX3VucmVnaXN0ZXI7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl91bnJlZ2lz dGVyOgorCW10a19kZHBfY29tcF91bnJlZ2lzdGVyKGRybSwgJmRzaS0+ZGRwX2NvbXApOworCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfdW5iaW5kKHN0cnVjdCBkZXZpY2Ug KmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAorCQkJICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtID0gZGF0YTsKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpOworCisJZHNp ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEodG9fcGxhdGZvcm1fZGV2aWNlKGRldikpOworCW10a19k c2lfZGVzdHJveV9jb25uX2VuYyhkc2kpOworCW10a19kZHBfY29tcF91bnJlZ2lzdGVyKGRybSwg JmRzaS0+ZGRwX2NvbXApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMg bXRrX2RzaV9jb21wb25lbnRfb3BzID0geworCS5iaW5kID0gbXRrX2RzaV9iaW5kLAorCS51bmJp bmQgPSBtdGtfZHNpX3VuYmluZCwKK307CisKK3N0YXRpYyBpbnQgbXRrX2RzaV9wcm9iZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdGtfZHNpICpkc2k7CisJc3Ry dWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJlbW90 ZV9ub2RlLCAqZW5kcG9pbnQ7CisJc3RydWN0IHJlc291cmNlICpyZWdzOworCWludCBjb21wX2lk OworCWludCByZXQ7CisKKwlkc2kgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRzaSksIEdG UF9LRVJORUwpOworCWRzaS0+bW9kZV9mbGFncyA9IE1JUElfRFNJX01PREVfVklERU8gfCBNSVBJ X0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0U7CisJZHNpLT5mb3JtYXQgPSBNSVBJX0RTSV9GTVRf UkdCODg4OworCWRzaS0+bGFuZXMgPSA0OworCisJZW5kcG9pbnQgPSBvZl9ncmFwaF9nZXRfbmV4 dF9lbmRwb2ludChkZXYtPm9mX25vZGUsIE5VTEwpOworCWlmIChlbmRwb2ludCkgeworCQlyZW1v dGVfbm9kZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQoZW5kcG9pbnQpOworCQlp ZiAoIXJlbW90ZV9ub2RlKSB7CisJCQlkZXZfZXJyKGRldiwgIk5vIHBhbmVsIGNvbm5lY3RlZFxu Iik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCWRzaS0+YnJpZGdlID0gb2ZfZHJtX2Zp bmRfYnJpZGdlKHJlbW90ZV9ub2RlKTsKKwkJZHNpLT5wYW5lbCA9IG9mX2RybV9maW5kX3BhbmVs KHJlbW90ZV9ub2RlKTsKKwkJb2Zfbm9kZV9wdXQocmVtb3RlX25vZGUpOworCQlpZiAoIWRzaS0+ YnJpZGdlICYmICFkc2ktPnBhbmVsKSB7CisJCQlkZXZfaW5mbyhkZXYsICJXYWl0aW5nIGZvciBi cmlkZ2Ugb3IgcGFuZWwgZHJpdmVyXG4iKTsKKwkJCXJldHVybiAtRVBST0JFX0RFRkVSOworCQl9 CisJfQorCisJZHNpLT5lbmdpbmVfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImVuZ2luZSIpOwor CWlmIChJU19FUlIoZHNpLT5lbmdpbmVfY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGRzaS0+ZW5n aW5lX2Nsayk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBlbmdpbmUgY2xvY2s6ICVk XG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRzaS0+ZGlnaXRhbF9jbGsgPSBkZXZt X2Nsa19nZXQoZGV2LCAiZGlnaXRhbCIpOworCWlmIChJU19FUlIoZHNpLT5kaWdpdGFsX2Nsaykp IHsKKwkJcmV0ID0gUFRSX0VSUihkc2ktPmRpZ2l0YWxfY2xrKTsKKwkJZGV2X2VycihkZXYsICJG YWlsZWQgdG8gZ2V0IGRpZ2l0YWwgY2xvY2s6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0Owor CX0KKworCWRzaS0+aHNfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImhzIik7CisJaWYgKElTX0VS Uihkc2ktPmhzX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2ktPmhzX2Nsayk7CisJCWRldl9l cnIoZGV2LCAiRmFpbGVkIHRvIGdldCBocyBjbG9jazogJWRcbiIsIHJldCk7CisJCXJldHVybiBy ZXQ7CisJfQorCisJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNF X01FTSwgMCk7CisJZHNpLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVncyk7 CisJaWYgKElTX0VSUihkc2ktPnJlZ3MpKSB7CisJCXJldCA9IFBUUl9FUlIoZHNpLT5yZWdzKTsK KwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW9yZW1hcCBtZW1vcnk6ICVkXG4iLCByZXQpOwor CQlyZXR1cm4gcmV0OworCX0KKworCWRzaS0+cGh5ID0gZGV2bV9waHlfZ2V0KGRldiwgImRwaHki KTsKKwlpZiAoSVNfRVJSKGRzaS0+cGh5KSkgeworCQlyZXQgPSBQVFJfRVJSKGRzaS0+cGh5KTsK KwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IE1JUEktRFBIWTogJWRcbiIsIHJldCk7CisJ CXJldHVybiByZXQ7CisJfQorCisJY29tcF9pZCA9IG10a19kZHBfY29tcF9nZXRfaWQoZGV2LT5v Zl9ub2RlLCBNVEtfRFNJKTsKKwlpZiAoY29tcF9pZCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJG YWlsZWQgdG8gaWRlbnRpZnkgYnkgYWxpYXM6ICVkXG4iLCBjb21wX2lkKTsKKwkJcmV0dXJuIGNv bXBfaWQ7CisJfQorCisJcmV0ID0gbXRrX2RkcF9jb21wX2luaXQoZGV2LCBkZXYtPm9mX25vZGUs ICZkc2ktPmRkcF9jb21wLCBjb21wX2lkLAorCQkJCSZtdGtfZHNpX2Z1bmNzKTsKKwlpZiAocmV0 KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgY29tcG9uZW50OiAlZFxu IiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2 LCBkc2kpOworCisJcmV0ID0gY29tcG9uZW50X2FkZCgmcGRldi0+ZGV2LCAmbXRrX2RzaV9jb21w b25lbnRfb3BzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFkZCBE U0kgY29tcG9uZW50XG4iKTsKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJfQorCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RzaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEo cGRldik7CisKKwltdGtfb3V0cHV0X2RzaV9kaXNhYmxlKGRzaSk7CisJY29tcG9uZW50X2RlbCgm cGRldi0+ZGV2LCAmbXRrX2RzaV9jb21wb25lbnRfb3BzKTsKKworCXJldHVybiAwOworfQorCisj aWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IG10a19kc2lfc3VzcGVuZChzdHJ1Y3QgZGV2aWNl ICpkZXYpCit7CisJc3RydWN0IG10a19kc2kgKmRzaTsKKworCWRzaSA9IGRldl9nZXRfZHJ2ZGF0 YShkZXYpOworCisJbXRrX291dHB1dF9kc2lfZGlzYWJsZShkc2kpOworCURSTV9ERUJVR19EUklW RVIoImRzaSBzdXNwZW5kIHN1Y2Nlc3MhXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IG10a19kc2lfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2Rz aSAqZHNpOworCisJZHNpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwltdGtfb3V0cHV0X2Rz aV9lbmFibGUoZHNpKTsKKwlEUk1fREVCVUdfRFJJVkVSKCJkc2kgcmVzdW1lIHN1Y2Nlc3MhXG4i KTsKKworCXJldHVybiAwOworfQorI2VuZGlmCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMobXRr X2RzaV9wbV9vcHMsIG10a19kc2lfc3VzcGVuZCwgbXRrX2RzaV9yZXN1bWUpOworCitzdGF0aWMg Y29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfZHNpX29mX21hdGNoW10gPSB7CisJeyAuY29t cGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZHNpIiB9LAorCXsgfSwKK307CisKK3N0cnVjdCBw bGF0Zm9ybV9kcml2ZXIgbXRrX2RzaV9kcml2ZXIgPSB7CisJLnByb2JlID0gbXRrX2RzaV9wcm9i ZSwKKwkucmVtb3ZlID0gbXRrX2RzaV9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAi bXRrLWRzaSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19kc2lfb2ZfbWF0Y2gsCisJCS5wbSA9 ICZtdGtfZHNpX3BtX29wcywKKwl9LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHNpLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ODBhZmMKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5oCkBAIC0wLDAgKzEsNTggQEAK Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9NVEtfRFNJ X0hfCisjZGVmaW5lIF9NVEtfRFNJX0hfCisKKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKwor I2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKworc3RydWN0IHBoeTsKKworc3RydWN0IG10 a19kc2kgeworCXN0cnVjdCBtdGtfZGRwX2NvbXAgZGRwX2NvbXA7CisJc3RydWN0IGRldmljZSAq ZGV2OworCXN0cnVjdCBkcm1fZW5jb2RlciBlbmNvZGVyOworCXN0cnVjdCBkcm1fY29ubmVjdG9y IGNvbm47CisJc3RydWN0IGRybV9wYW5lbCAqcGFuZWw7CisJc3RydWN0IGRybV9icmlkZ2UgKmJy aWRnZTsKKwlzdHJ1Y3QgcGh5ICpwaHk7CisKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisKKwlzdHJ1 Y3QgY2xrICplbmdpbmVfY2xrOworCXN0cnVjdCBjbGsgKmRpZ2l0YWxfY2xrOworCXN0cnVjdCBj bGsgKmhzX2NsazsKKworCXUzMiBkYXRhX3JhdGU7CisKKwl1bnNpZ25lZCBsb25nIG1vZGVfZmxh Z3M7CisJZW51bSBtaXBpX2RzaV9waXhlbF9mb3JtYXQgZm9ybWF0OworCXVuc2lnbmVkIGludCBs YW5lczsKKwlzdHJ1Y3QgdmlkZW9tb2RlIHZtOworCWludCByZWZjb3VudDsKKwlib29sIGVuYWJs ZWQ7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfZHNpICplbmNvZGVyX3RvX2RzaShz dHJ1Y3QgZHJtX2VuY29kZXIgKmUpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihlLCBzdHJ1Y3Qg bXRrX2RzaSwgZW5jb2Rlcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19kc2kgKmNv bm5lY3Rvcl90b19kc2koc3RydWN0IGRybV9jb25uZWN0b3IgKmMpCit7CisJcmV0dXJuIGNvbnRh aW5lcl9vZihjLCBzdHJ1Y3QgbXRrX2RzaSwgY29ubik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19taXBpX3R4LmMgYi9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX21pcGlfdHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi4zYjkxYTM2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19taXBpX3R4LmMKQEAgLTAsMCArMSw0ODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw MTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgv Y2xrLXByb3ZpZGVyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51 eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRm b3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKworI2RlZmluZSBNSVBJ VFhfRFNJX0NPTgkJMHgwMAorI2RlZmluZSBSR19EU0lfTERPQ09SRV9FTgkJQklUKDApCisjZGVm aW5lIFJHX0RTSV9DS0dfTERPT1VUX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0JDTEtfU0VM CQkJKDMgPDwgMikKKyNkZWZpbmUgUkdfRFNJX0xEX0lEWF9TRUwJCSg3IDw8IDQpCisjZGVmaW5l IFJHX0RTSV9QSFlDTEtfU0VMCQkoMiA8PCA4KQorI2RlZmluZSBSR19EU0lfRFNJQ0xLX0ZSRVFf U0VMCQlCSVQoMTApCisjZGVmaW5lIFJHX0RTSV9MUFRYX0NMTVBfRU4JCUJJVCgxMSkKKworI2Rl ZmluZSBNSVBJVFhfRFNJX0NMT0NLX0xBTkUJMHgwNAorI2RlZmluZSBSR19EU0lfTE5UQ19MRE9P VVRfRU4JCUJJVCgwKQorI2RlZmluZSBSR19EU0lfTE5UQ19DS0xBTkVfRU4JCUJJVCgxKQorI2Rl ZmluZSBSR19EU0lfTE5UQ19MUFRYX0lQTFVTMQkJQklUKDIpCisjZGVmaW5lIFJHX0RTSV9MTlRD X0xQVFhfSVBMVVMyCQlCSVQoMykKKyNkZWZpbmUgUkdfRFNJX0xOVENfTFBUWF9JTUlOVVMJCUJJ VCg0KQorI2RlZmluZSBSR19EU0lfTE5UQ19MUENEX0lQTFVTCQlCSVQoNSkKKyNkZWZpbmUgUkdf RFNJX0xOVENfTFBDRF9JTUxVUwkJQklUKDYpCisjZGVmaW5lIFJHX0RTSV9MTlRDX1JUX0NPREUJ CSgweGYgPDwgOCkKKworI2RlZmluZSBNSVBJVFhfRFNJX0RBVEFfTEFORTAJMHgwOAorI2RlZmlu ZSBSR19EU0lfTE5UMF9MRE9PVVRfRU4JCUJJVCgwKQorI2RlZmluZSBSR19EU0lfTE5UMF9DS0xB TkVfRU4JCUJJVCgxKQorI2RlZmluZSBSR19EU0lfTE5UMF9MUFRYX0lQTFVTMQkJQklUKDIpCisj ZGVmaW5lIFJHX0RTSV9MTlQwX0xQVFhfSVBMVVMyCQlCSVQoMykKKyNkZWZpbmUgUkdfRFNJX0xO VDBfTFBUWF9JTUlOVVMJCUJJVCg0KQorI2RlZmluZSBSR19EU0lfTE5UMF9MUENEX0lQTFVTCQlC SVQoNSkKKyNkZWZpbmUgUkdfRFNJX0xOVDBfTFBDRF9JTUlOVVMJCUJJVCg2KQorI2RlZmluZSBS R19EU0lfTE5UMF9SVF9DT0RFCQkoMHhmIDw8IDgpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9EQVRB X0xBTkUxCTB4MGMKKyNkZWZpbmUgUkdfRFNJX0xOVDFfTERPT1VUX0VOCQlCSVQoMCkKKyNkZWZp bmUgUkdfRFNJX0xOVDFfQ0tMQU5FX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0xOVDFfTFBU WF9JUExVUzEJCUJJVCgyKQorI2RlZmluZSBSR19EU0lfTE5UMV9MUFRYX0lQTFVTMgkJQklUKDMp CisjZGVmaW5lIFJHX0RTSV9MTlQxX0xQVFhfSU1JTlVTCQlCSVQoNCkKKyNkZWZpbmUgUkdfRFNJ X0xOVDFfTFBDRF9JUExVUwkJQklUKDUpCisjZGVmaW5lIFJHX0RTSV9MTlQxX0xQQ0RfSU1JTlVT CQlCSVQoNikKKyNkZWZpbmUgUkdfRFNJX0xOVDFfUlRfQ09ERQkJKDB4ZiA8PCA4KQorCisjZGVm aW5lIE1JUElUWF9EU0lfREFUQV9MQU5FMgkweDEwCisjZGVmaW5lIFJHX0RTSV9MTlQyX0xET09V VF9FTgkJQklUKDApCisjZGVmaW5lIFJHX0RTSV9MTlQyX0NLTEFORV9FTgkJQklUKDEpCisjZGVm aW5lIFJHX0RTSV9MTlQyX0xQVFhfSVBMVVMxCQlCSVQoMikKKyNkZWZpbmUgUkdfRFNJX0xOVDJf TFBUWF9JUExVUzIJCUJJVCgzKQorI2RlZmluZSBSR19EU0lfTE5UMl9MUFRYX0lNSU5VUwkJQklU KDQpCisjZGVmaW5lIFJHX0RTSV9MTlQyX0xQQ0RfSVBMVVMJCUJJVCg1KQorI2RlZmluZSBSR19E U0lfTE5UMl9MUENEX0lNSU5VUwkJQklUKDYpCisjZGVmaW5lIFJHX0RTSV9MTlQyX1JUX0NPREUJ CSgweGYgPDwgOCkKKworI2RlZmluZSBNSVBJVFhfRFNJX0RBVEFfTEFORTMJMHgxNAorI2RlZmlu ZSBSR19EU0lfTE5UM19MRE9PVVRfRU4JCUJJVCgwKQorI2RlZmluZSBSR19EU0lfTE5UM19DS0xB TkVfRU4JCUJJVCgxKQorI2RlZmluZSBSR19EU0lfTE5UM19MUFRYX0lQTFVTMQkJQklUKDIpCisj ZGVmaW5lIFJHX0RTSV9MTlQzX0xQVFhfSVBMVVMyCQlCSVQoMykKKyNkZWZpbmUgUkdfRFNJX0xO VDNfTFBUWF9JTUlOVVMJCUJJVCg0KQorI2RlZmluZSBSR19EU0lfTE5UM19MUENEX0lQTFVTCQlC SVQoNSkKKyNkZWZpbmUgUkdfRFNJX0xOVDNfTFBDRF9JTUlOVVMJCUJJVCg2KQorI2RlZmluZSBS R19EU0lfTE5UM19SVF9DT0RFCQkoMHhmIDw8IDgpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9UT1Bf Q09OCTB4NDAKKyNkZWZpbmUgUkdfRFNJX0xOVF9JTlRSX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdf RFNJX0xOVF9IU19CSUFTX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0xOVF9JTVBfQ0FMX0VO CQlCSVQoMikKKyNkZWZpbmUgUkdfRFNJX0xOVF9URVNUTU9ERV9FTgkJQklUKDMpCisjZGVmaW5l IFJHX0RTSV9MTlRfSU1QX0NBTF9DT0RFCQkoMHhmIDw8IDQpCisjZGVmaW5lIFJHX0RTSV9MTlRf QUlPX1NFTAkJKDcgPDwgOCkKKyNkZWZpbmUgUkdfRFNJX1BBRF9USUVfTE9XX0VOCQlCSVQoMTEp CisjZGVmaW5lIFJHX0RTSV9ERUJVR19JTlBVVF9FTgkJQklUKDEyKQorI2RlZmluZSBSR19EU0lf UFJFU0VSVkUJCQkoNyA8PCAxMykKKworI2RlZmluZSBNSVBJVFhfRFNJX0JHX0NPTgkweDQ0Cisj ZGVmaW5lIFJHX0RTSV9CR19DT1JFX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX0JHX0NLRU4J CQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0JHX0RJVgkJCSgweDMgPDwgMikKKyNkZWZpbmUgUkdf RFNJX0JHX0ZBU1RfQ0hBUkdFCQlCSVQoNCkKKyNkZWZpbmUgUkdfRFNJX1ZPVVRfTVNLCQkJKDB4 M2ZmZmYgPDwgNSkKKyNkZWZpbmUgUkdfRFNJX1YxMl9TRUwJCQkoNyA8PCA1KQorI2RlZmluZSBS R19EU0lfVjEwX1NFTAkJCSg3IDw8IDgpCisjZGVmaW5lIFJHX0RTSV9WMDcyX1NFTAkJCSg3IDw8 IDExKQorI2RlZmluZSBSR19EU0lfVjA0X1NFTAkJCSg3IDw8IDE0KQorI2RlZmluZSBSR19EU0lf VjAzMl9TRUwJCQkoNyA8PCAxNykKKyNkZWZpbmUgUkdfRFNJX1YwMl9TRUwJCQkoNyA8PCAyMCkK KyNkZWZpbmUgUkdfRFNJX0JHX1IxX1RSSU0JCSgweGYgPDwgMjQpCisjZGVmaW5lIFJHX0RTSV9C R19SMl9UUklNCQkoMHhmIDw8IDI4KQorCisjZGVmaW5lIE1JUElUWF9EU0lfUExMX0NPTjAJMHg1 MAorI2RlZmluZSBSR19EU0lfTVBQTExfUExMX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX01Q UExMX0RJVl9NU0sJCSgweDFmZiA8PCAxKQorI2RlZmluZSBSR19EU0lfTVBQTExfUFJFRElWCQko MyA8PCAxKQorI2RlZmluZSBSR19EU0lfTVBQTExfVFhESVYwCQkoMyA8PCAzKQorI2RlZmluZSBS R19EU0lfTVBQTExfVFhESVYxCQkoMyA8PCA1KQorI2RlZmluZSBSR19EU0lfTVBQTExfUE9TRElW CQkoNyA8PCA3KQorI2RlZmluZSBSR19EU0lfTVBQTExfTU9OVkNfRU4JCUJJVCgxMCkKKyNkZWZp bmUgUkdfRFNJX01QUExMX01PTlJFRl9FTgkJQklUKDExKQorI2RlZmluZSBSR19EU0lfTVBQTExf Vk9EX0VOCQlCSVQoMTIpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9QTExfQ09OMQkweDU0CisjZGVm aW5lIFJHX0RTSV9NUFBMTF9TRE1fRlJBX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX01QUExM X1NETV9TU0NfUEhfSU5JVAlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9TU0NfRU4J CUJJVCgyKQorI2RlZmluZSBSR19EU0lfTVBQTExfU0RNX1NTQ19QUkQJKDB4ZmZmZiA8PCAxNikK KworI2RlZmluZSBNSVBJVFhfRFNJX1BMTF9DT04yCTB4NTgKKworI2RlZmluZSBNSVBJVFhfRFNJ X1BMTF9QV1IJMHg2OAorI2RlZmluZSBSR19EU0lfTVBQTExfU0RNX1BXUl9PTgkJQklUKDApCisj ZGVmaW5lIFJHX0RTSV9NUFBMTF9TRE1fSVNPX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX01Q UExMX1NETV9QV1JfQUNLCUJJVCg4KQorCisjZGVmaW5lIE1JUElUWF9EU0lfU1dfQ1RSTAkweDgw CisjZGVmaW5lIFNXX0NUUkxfRU4JCQlCSVQoMCkKKworI2RlZmluZSBNSVBJVFhfRFNJX1NXX0NU UkxfQ09OMAkweDg0CisjZGVmaW5lIFNXX0xOVENfTFBUWF9QUkVfT0UJCUJJVCgwKQorI2RlZmlu ZSBTV19MTlRDX0xQVFhfT0UJCQlCSVQoMSkKKyNkZWZpbmUgU1dfTE5UQ19MUFRYX1AJCQlCSVQo MikKKyNkZWZpbmUgU1dfTE5UQ19MUFRYX04JCQlCSVQoMykKKyNkZWZpbmUgU1dfTE5UQ19IU1RY X1BSRV9PRQkJQklUKDQpCisjZGVmaW5lIFNXX0xOVENfSFNUWF9PRQkJCUJJVCg1KQorI2RlZmlu ZSBTV19MTlRDX0hTVFhfWkVST0NMSwkJQklUKDYpCisjZGVmaW5lIFNXX0xOVDBfTFBUWF9QUkVf T0UJCUJJVCg3KQorI2RlZmluZSBTV19MTlQwX0xQVFhfT0UJCQlCSVQoOCkKKyNkZWZpbmUgU1df TE5UMF9MUFRYX1AJCQlCSVQoOSkKKyNkZWZpbmUgU1dfTE5UMF9MUFRYX04JCQlCSVQoMTApCisj ZGVmaW5lIFNXX0xOVDBfSFNUWF9QUkVfT0UJCUJJVCgxMSkKKyNkZWZpbmUgU1dfTE5UMF9IU1RY X09FCQkJQklUKDEyKQorI2RlZmluZSBTV19MTlQwX0xQUlhfRU4JCQlCSVQoMTMpCisjZGVmaW5l IFNXX0xOVDFfTFBUWF9QUkVfT0UJCUJJVCgxNCkKKyNkZWZpbmUgU1dfTE5UMV9MUFRYX09FCQkJ QklUKDE1KQorI2RlZmluZSBTV19MTlQxX0xQVFhfUAkJCUJJVCgxNikKKyNkZWZpbmUgU1dfTE5U MV9MUFRYX04JCQlCSVQoMTcpCisjZGVmaW5lIFNXX0xOVDFfSFNUWF9QUkVfT0UJCUJJVCgxOCkK KyNkZWZpbmUgU1dfTE5UMV9IU1RYX09FCQkJQklUKDE5KQorI2RlZmluZSBTV19MTlQyX0xQVFhf UFJFX09FCQlCSVQoMjApCisjZGVmaW5lIFNXX0xOVDJfTFBUWF9PRQkJCUJJVCgyMSkKKyNkZWZp bmUgU1dfTE5UMl9MUFRYX1AJCQlCSVQoMjIpCisjZGVmaW5lIFNXX0xOVDJfTFBUWF9OCQkJQklU KDIzKQorI2RlZmluZSBTV19MTlQyX0hTVFhfUFJFX09FCQlCSVQoMjQpCisjZGVmaW5lIFNXX0xO VDJfSFNUWF9PRQkJCUJJVCgyNSkKKworc3RydWN0IG10a19taXBpX3R4IHsKKwlzdHJ1Y3QgZGV2 aWNlICpkZXY7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXVuc2lnbmVkIGludCBkYXRhX3JhdGU7 CisJc3RydWN0IGNsa19odyBwbGxfaHc7CisJc3RydWN0IGNsayAqcGxsOworfTsKKworc3RhdGlj IHZvaWQgbXRrX21pcGlfdHhfbWFzayhzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHgsIHUzMiBv ZmZzZXQsIHUzMiBtYXNrLAorCQkJICAgICB1MzIgZGF0YSkKK3sKKwl1MzIgdGVtcCA9IHJlYWRs KG1pcGlfdHgtPnJlZ3MgKyBvZmZzZXQpOworCisJd3JpdGVsKCh0ZW1wICYgfm1hc2spIHwgKGRh dGEgJiBtYXNrKSwgbWlwaV90eC0+cmVncyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbnQgbXRr X21pcGlfdHhfcGxsX3ByZXBhcmUoc3RydWN0IGNsa19odyAqaHcpCit7CisJc3RydWN0IG10a19t aXBpX3R4ICptaXBpX3R4ID0gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgbXRrX21pcGlfdHgsCisJ CQkJCQkgICBwbGxfaHcpOworCXVuc2lnbmVkIGludCB0eGRpdiwgdHhkaXYwLCB0eGRpdjE7CisJ dTY0IHBjdzsKKworCWRldl9kYmcobWlwaV90eC0+ZGV2LCAicHJlcGFyZTogJXUgSHpcbiIsIG1p cGlfdHgtPmRhdGFfcmF0ZSk7CisKKwlpZiAobWlwaV90eC0+ZGF0YV9yYXRlID49IDUwMDAwMDAw MCkgeworCQl0eGRpdiA9IDE7CisJCXR4ZGl2MCA9IDA7CisJCXR4ZGl2MSA9IDA7CisJfSBlbHNl IGlmIChtaXBpX3R4LT5kYXRhX3JhdGUgPj0gMjUwMDAwMDAwKSB7CisJCXR4ZGl2ID0gMjsKKwkJ dHhkaXYwID0gMTsKKwkJdHhkaXYxID0gMDsKKwl9IGVsc2UgaWYgKG1pcGlfdHgtPmRhdGFfcmF0 ZSA+PSAxMjUwMDAwMDApIHsKKwkJdHhkaXYgPSA0OworCQl0eGRpdjAgPSAyOworCQl0eGRpdjEg PSAwOworCX0gZWxzZSBpZiAobWlwaV90eC0+ZGF0YV9yYXRlID4gNjIwMDAwMDApIHsKKwkJdHhk aXYgPSA4OworCQl0eGRpdjAgPSAyOworCQl0eGRpdjEgPSAxOworCX0gZWxzZSBpZiAobWlwaV90 eC0+ZGF0YV9yYXRlID49IDUwMDAwMDAwKSB7CisJCXR4ZGl2ID0gMTY7CisJCXR4ZGl2MCA9IDI7 CisJCXR4ZGl2MSA9IDI7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXRr X21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0JHX0NPTiwKKwkJCSBSR19EU0lfVk9V VF9NU0sgfCBSR19EU0lfQkdfQ0tFTiB8IFJHX0RTSV9CR19DT1JFX0VOLAorCQkJICg0IDw8IDIw KSB8ICg0IDw8IDE3KSB8ICg0IDw8IDE0KSB8CisJCQkgKDQgPDwgMTEpIHwgKDQgPDwgOCkgfCAo NCA8PCA1KSB8CisJCQkgUkdfRFNJX0JHX0NLRU4gfCBSR19EU0lfQkdfQ09SRV9FTik7CisKKwl1 c2xlZXBfcmFuZ2UoMzAsIDEwMCk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElU WF9EU0lfVE9QX0NPTiwKKwkJCSBSR19EU0lfTE5UX0lNUF9DQUxfQ09ERSB8IFJHX0RTSV9MTlRf SFNfQklBU19FTiwKKwkJCSAoOCA8PCA0KSB8IFJHX0RTSV9MTlRfSFNfQklBU19FTik7CisKKwlt dGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfQ09OLAorCQkJIFJHX0RTSV9DS0df TERPT1VUX0VOIHwgUkdfRFNJX0xET0NPUkVfRU4sCisJCQkgUkdfRFNJX0NLR19MRE9PVVRfRU4g fCBSR19EU0lfTERPQ09SRV9FTik7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElU WF9EU0lfUExMX1BXUiwKKwkJCSBSR19EU0lfTVBQTExfU0RNX1BXUl9PTiB8IFJHX0RTSV9NUFBM TF9TRE1fSVNPX0VOLAorCQkJIFJHX0RTSV9NUFBMTF9TRE1fUFdSX09OKTsKKworCW10a19taXBp X3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09OMCwgUkdfRFNJX01QUExMX1BMTF9F TiwgMCk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjAs CisJCQkgUkdfRFNJX01QUExMX1RYRElWMCB8IFJHX0RTSV9NUFBMTF9UWERJVjEgfAorCQkJIFJH X0RTSV9NUFBMTF9QUkVESVYsCisJCQkgKHR4ZGl2MCA8PCAzKSB8ICh0eGRpdjEgPDwgNSkpOwor CisJLyoKKwkgKiBQTEwgUENXIGNvbmZpZworCSAqIFBDVyBiaXQgMjR+MzAgPSBpbnRlZ2VyIHBh cnQgb2YgcGN3CisJICogUENXIGJpdCAwfjIzID0gZnJhY3Rpb25hbCBwYXJ0IG9mIHBjdworCSAq IHBjdyA9IGRhdGFfUmF0ZSo0KnR4ZGl2LyhSZWZfY2xrKjIpOworCSAqIFBvc3QgRElWID00LCBz byBuZWVkIGRhdGFfUmF0ZSo0CisJICogUmVmX2NsayBpcyAyNk1IegorCSAqLworCXBjdyA9ICgo dTY0KW1pcGlfdHgtPmRhdGFfcmF0ZSAqIDIgKiB0eGRpdikgPDwgMjQ7CisJcGN3IC89IDI2MDAw MDAwOworCXdyaXRlbChwY3csIG1pcGlfdHgtPnJlZ3MgKyBNSVBJVFhfRFNJX1BMTF9DT04yKTsK KworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09OMSwKKwkJCSBS R19EU0lfTVBQTExfU0RNX0ZSQV9FTiwgUkdfRFNJX01QUExMX1NETV9GUkFfRU4pOworCisJbXRr X21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04wLAorCQkJIFJHX0RTSV9N UFBMTF9QTExfRU4sIFJHX0RTSV9NUFBMTF9QTExfRU4pOworCisJdXNsZWVwX3JhbmdlKDIwLCAx MDApOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04xLAor CQkJIFJHX0RTSV9NUFBMTF9TRE1fU1NDX0VOLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgdm9pZCBtdGtfbWlwaV90eF9wbGxfdW5wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQorewor CXN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9IGNvbnRhaW5lcl9vZihodywgc3RydWN0IG10 a19taXBpX3R4LAorCQkJCQkJICAgcGxsX2h3KTsKKworCWRldl9kYmcobWlwaV90eC0+ZGV2LCAi dW5wcmVwYXJlXG4iKTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9Q TExfQ09OMCwgUkdfRFNJX01QUExMX1BMTF9FTiwgMCk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1p cGlfdHgsIE1JUElUWF9EU0lfUExMX1BXUiwKKwkJCSBSR19EU0lfTVBQTExfU0RNX0lTT19FTiB8 IFJHX0RTSV9NUFBMTF9TRE1fUFdSX09OLAorCQkJIFJHX0RTSV9NUFBMTF9TRE1fSVNPX0VOKTsK KworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9UT1BfQ09OLCBSR19EU0lf TE5UX0hTX0JJQVNfRU4sIDApOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhf RFNJX0NPTiwKKwkJCSBSR19EU0lfQ0tHX0xET09VVF9FTiB8IFJHX0RTSV9MRE9DT1JFX0VOLCAw KTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9CR19DT04sCisJCQkg UkdfRFNJX0JHX0NLRU4gfCBSR19EU0lfQkdfQ09SRV9FTiwgMCk7CisKKwltdGtfbWlwaV90eF9t YXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjAsIFJHX0RTSV9NUFBMTF9ESVZfTVNLLCAw KTsKK30KKworc3RhdGljIGxvbmcgbXRrX21pcGlfdHhfcGxsX3JvdW5kX3JhdGUoc3RydWN0IGNs a19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyAq cHJhdGUpCit7CisJcmV0dXJuIGNsYW1wX3ZhbChyYXRlLCA1MDAwMDAwMCwgMTI1MDAwMDAwMCk7 Cit9CisKK3N0YXRpYyBpbnQgbXRrX21pcGlfdHhfcGxsX3NldF9yYXRlKHN0cnVjdCBjbGtfaHcg Kmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X3Jh dGUpCit7CisJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gY29udGFpbmVyX29mKGh3LCBz dHJ1Y3QgbXRrX21pcGlfdHgsCisJCQkJCQkgICBwbGxfaHcpOworCisJZGV2X2RiZyhtaXBpX3R4 LT5kZXYsICJzZXQgcmF0ZTogJWx1IEh6XG4iLCByYXRlKTsKKworCW1pcGlfdHgtPmRhdGFfcmF0 ZSA9IHJhdGU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbXRrX21p cGlfdHhfcGxsX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LAorCQkJCQkJIHVuc2lnbmVk IGxvbmcgcGFyZW50X3JhdGUpCit7CisJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gY29u dGFpbmVyX29mKGh3LCBzdHJ1Y3QgbXRrX21pcGlfdHgsCisJCQkJCQkgICBwbGxfaHcpOworCXJl dHVybiBtaXBpX3R4LT5kYXRhX3JhdGU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBtdGtf bWlwaV90eF9wbGxfb3BzID0geworCS5wcmVwYXJlID0gbXRrX21pcGlfdHhfcGxsX3ByZXBhcmUs CisJLnVucHJlcGFyZSA9IG10a19taXBpX3R4X3BsbF91bnByZXBhcmUsCisJLnJvdW5kX3JhdGUg PSBtdGtfbWlwaV90eF9wbGxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSBtdGtfbWlwaV90eF9w bGxfc2V0X3JhdGUsCisJLnJlY2FsY19yYXRlID0gbXRrX21pcGlfdHhfcGxsX3JlY2FsY19yYXRl LAorfTsKKworc3RhdGljIGludCBtdGtfbWlwaV90eF9wb3dlcl9vbl9zaWduYWwoc3RydWN0IHBo eSAqcGh5KQoreworCXN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9IHBoeV9nZXRfZHJ2ZGF0 YShwaHkpOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0NMT0NLX0xB TkUsCisJCQlSR19EU0lfTE5UQ19MRE9PVVRfRU4sIFJHX0RTSV9MTlRDX0xET09VVF9FTik7CisJ bXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0RBVEFfTEFORTAsCisJCQlSR19E U0lfTE5UMF9MRE9PVVRfRU4sIFJHX0RTSV9MTlQwX0xET09VVF9FTik7CisJbXRrX21pcGlfdHhf bWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0RBVEFfTEFORTEsCisJCQlSR19EU0lfTE5UMV9MRE9P VVRfRU4sIFJHX0RTSV9MTlQxX0xET09VVF9FTik7CisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4 LCBNSVBJVFhfRFNJX0RBVEFfTEFORTIsCisJCQlSR19EU0lfTE5UMl9MRE9PVVRfRU4sIFJHX0RT SV9MTlQyX0xET09VVF9FTik7CisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJ X0RBVEFfTEFORTMsCisJCQlSR19EU0lfTE5UM19MRE9PVVRfRU4sIFJHX0RTSV9MTlQzX0xET09V VF9FTik7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfVE9QX0NPTiwg UkdfRFNJX1BBRF9USUVfTE9XX0VOLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IG10a19taXBpX3R4X3Bvd2VyX29uKHN0cnVjdCBwaHkgKnBoeSkKK3sKKwlzdHJ1Y3QgbXRrX21p cGlfdHggKm1pcGlfdHggPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKKwlpbnQgcmV0OworCisJLyog UG93ZXIgdXAgY29yZSBhbmQgZW5hYmxlIFBMTCAqLworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJs ZShtaXBpX3R4LT5wbGwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogRW5h YmxlIERTSSBMYW5lIExETyBvdXRwdXRzLCBkaXNhYmxlIHBhZCB0aWUgbG93ICovCisJbXRrX21p cGlfdHhfcG93ZXJfb25fc2lnbmFsKHBoeSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZv aWQgbXRrX21pcGlfdHhfcG93ZXJfb2ZmX3NpZ25hbChzdHJ1Y3QgcGh5ICpwaHkpCit7CisJc3Ry dWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7CisKKwltdGtf bWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfVE9QX0NPTiwgUkdfRFNJX1BBRF9USUVf TE9XX0VOLAorCQkJUkdfRFNJX1BBRF9USUVfTE9XX0VOKTsKKworCW10a19taXBpX3R4X21hc2so bWlwaV90eCwgTUlQSVRYX0RTSV9DTE9DS19MQU5FLAorCQkJIFJHX0RTSV9MTlRDX0xET09VVF9F TiwgMCk7CisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0RBVEFfTEFORTAs CisJCQkgUkdfRFNJX0xOVDBfTERPT1VUX0VOLCAwKTsKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlf dHgsIE1JUElUWF9EU0lfREFUQV9MQU5FMSwKKwkJCSBSR19EU0lfTE5UMV9MRE9PVVRfRU4sIDAp OworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9EQVRBX0xBTkUyLAorCQkJ IFJHX0RTSV9MTlQyX0xET09VVF9FTiwgMCk7CisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBN SVBJVFhfRFNJX0RBVEFfTEFORTMsCisJCQkgUkdfRFNJX0xOVDNfTERPT1VUX0VOLCAwKTsKK30K Kworc3RhdGljIGludCBtdGtfbWlwaV90eF9wb3dlcl9vZmYoc3RydWN0IHBoeSAqcGh5KQorewor CXN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOworCisJ LyogRW5hYmxlIHBhZCB0aWUgbG93LCBkaXNhYmxlIERTSSBMYW5lIExETyBvdXRwdXRzICovCisJ bXRrX21pcGlfdHhfcG93ZXJfb2ZmX3NpZ25hbChwaHkpOworCisJLyogRGlzYWJsZSBQTEwgYW5k IHBvd2VyIGRvd24gY29yZSAqLworCWNsa19kaXNhYmxlX3VucHJlcGFyZShtaXBpX3R4LT5wbGwp OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGh5X29wcyBtdGtfbWlwaV90eF9v cHMgPSB7CisJLnBvd2VyX29uID0gbXRrX21pcGlfdHhfcG93ZXJfb24sCisJLnBvd2VyX29mZiA9 IG10a19taXBpX3R4X3Bvd2VyX29mZiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKK307CisKK3N0 YXRpYyBpbnQgbXRrX21pcGlfdHhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikK K3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBtdGtfbWlwaV90 eCAqbWlwaV90eDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwlzdHJ1Y3QgY2xrICpyZWZfY2xr OworCWNvbnN0IGNoYXIgKnJlZl9jbGtfbmFtZTsKKwlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBjbGtf aW5pdCA9IHsKKwkJLm9wcyA9ICZtdGtfbWlwaV90eF9wbGxfb3BzLAorCQkubnVtX3BhcmVudHMg PSAxLAorCQkucGFyZW50X25hbWVzID0gKGNvbnN0IGNoYXIgKiBjb25zdCAqKSZyZWZfY2xrX25h bWUsCisJCS5mbGFncyA9IENMS19TRVRfUkFURV9HQVRFLAorCX07CisJc3RydWN0IHBoeSAqcGh5 OworCXN0cnVjdCBwaHlfcHJvdmlkZXIgKnBoeV9wcm92aWRlcjsKKwlpbnQgcmV0OworCisJbWlw aV90eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWlwaV90eCksIEdGUF9LRVJORUwpOwor CWlmICghbWlwaV90eCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW0gPSBwbGF0Zm9ybV9nZXRf cmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCW1pcGlfdHgtPnJlZ3MgPSBkZXZt X2lvcmVtYXBfcmVzb3VyY2UoZGV2LCBtZW0pOworCWlmIChJU19FUlIobWlwaV90eC0+cmVncykp IHsKKwkJcmV0ID0gUFRSX0VSUihtaXBpX3R4LT5yZWdzKTsKKwkJZGV2X2VycihkZXYsICJGYWls ZWQgdG8gZ2V0IG1lbW9yeSByZXNvdXJjZTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJ fQorCisJcmVmX2NsayA9IGRldm1fY2xrX2dldChkZXYsIE5VTEwpOworCWlmIChJU19FUlIocmVm X2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihyZWZfY2xrKTsKKwkJZGV2X2VycihkZXYsICJGYWls ZWQgdG8gZ2V0IHJlZmVyZW5jZSBjbG9jazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJ fQorCXJlZl9jbGtfbmFtZSA9IF9fY2xrX2dldF9uYW1lKHJlZl9jbGspOworCisJcmV0ID0gb2Zf cHJvcGVydHlfcmVhZF9zdHJpbmcoZGV2LT5vZl9ub2RlLCAiY2xvY2stb3V0cHV0LW5hbWVzIiwK KwkJCQkgICAgICAmY2xrX2luaXQubmFtZSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihk ZXYsICJGYWlsZWQgdG8gcmVhZCBjbG9jay1vdXRwdXQtbmFtZXM6ICVkXG4iLCByZXQpOworCQly ZXR1cm4gcmV0OworCX0KKworCW1pcGlfdHgtPnBsbF9ody5pbml0ID0gJmNsa19pbml0OworCW1p cGlfdHgtPnBsbCA9IGRldm1fY2xrX3JlZ2lzdGVyKGRldiwgJm1pcGlfdHgtPnBsbF9odyk7CisJ aWYgKElTX0VSUihtaXBpX3R4LT5wbGwpKSB7CisJCXJldCA9IFBUUl9FUlIobWlwaV90eC0+cGxs KTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgUExMOiAlZFxuIiwgcmV0KTsK KwkJcmV0dXJuIHJldDsKKwl9CisKKwlwaHkgPSBkZXZtX3BoeV9jcmVhdGUoZGV2LCBOVUxMLCAm bXRrX21pcGlfdHhfb3BzKTsKKwlpZiAoSVNfRVJSKHBoeSkpIHsKKwkJcmV0ID0gUFRSX0VSUihw aHkpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBjcmVhdGUgTUlQSSBELVBIWTogJWRcbiIs IHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCXBoeV9zZXRfZHJ2ZGF0YShwaHksIG1pcGlfdHgp OworCisJcGh5X3Byb3ZpZGVyID0gZGV2bV9vZl9waHlfcHJvdmlkZXJfcmVnaXN0ZXIoZGV2LCBv Zl9waHlfc2ltcGxlX3hsYXRlKTsKKwlpZiAoSVNfRVJSKHBoeSkpIHsKKwkJcmV0ID0gUFRSX0VS UihwaHlfcHJvdmlkZXIpOworCQlyZXR1cm4gcmV0OworCX0KKworCW1pcGlfdHgtPmRldiA9IGRl djsKKworCXJldHVybiBvZl9jbGtfYWRkX3Byb3ZpZGVyKGRldi0+b2Zfbm9kZSwgb2ZfY2xrX3Ny Y19zaW1wbGVfZ2V0LAorCQkJCSAgIG1pcGlfdHgtPnBsbCk7Cit9CisKK3N0YXRpYyBpbnQgbXRr X21pcGlfdHhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJb2ZfY2xr X2RlbF9wcm92aWRlcihwZGV2LT5kZXYub2Zfbm9kZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19taXBpX3R4X21hdGNoW10gPSB7CisJeyAu Y29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtbWlwaS10eCIsIH0sCisJe30sCit9OworCitz dHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19taXBpX3R4X2RyaXZlciA9IHsKKwkucHJvYmUgPSBt dGtfbWlwaV90eF9wcm9iZSwKKwkucmVtb3ZlID0gbXRrX21pcGlfdHhfcmVtb3ZlLAorCS5kcml2 ZXIgPSB7CisJCS5uYW1lID0gIm1lZGlhdGVrLW1pcGktdHgiLAorCQkub2ZfbWF0Y2hfdGFibGUg PSBtdGtfbWlwaV90eF9tYXRjaCwKKwl9LAorfTsKLS0gCjIuNi4yCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRy aS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=