From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philipp Zabel Subject: [PATCH v10 03/13] drm/mediatek: Add DSI sub driver Date: Wed, 3 Feb 2016 20:25:52 +0100 Message-ID: <1454527562-28154-4-git-send-email-p.zabel@pengutronix.de> References: <1454527562-28154-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: <1454527562-28154-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: linux-mediatek@lists.infradead.org RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkIGEgZHJtIGVu Y29kZXIvY29ubmVjdG9yIGRyaXZlciBmb3IgdGhlIE1JUEkgRFNJIGZ1bmN0aW9uCmJsb2NrIG9m IHRoZSBNZWRpYXRlayBkaXNwbGF5IHN1YnN5c3RlbSBhbmQgYSBwaHkgZHJpdmVyIGZvciB0aGUg TUlQSSBUWApELVBIWSBjb250cm9sIG1vZHVsZS4KClNpZ25lZC1vZmYtYnk6IEppdGFvIFNoaSA8 aml0YW8uc2hpQG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJlbCA8cC56 YWJlbEBwZW5ndXRyb25peC5kZT4KLS0KQ2hhbmdlcyBzaW5jZSB2OToKIC0gZG9uJ3QgY3Jhc2gg b24gY2xlYW51cCBpZiB0aGUgY29ubmVjdG9yIHNldHVwIHdhcyBkZWxlZ2F0ZWQgdG8gdGhlIGJy aWRnZQogLSB2YXJpb3VzIGZpeGVzCi0tLQogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25m aWcgICAgICAgfCAgIDMgKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlICAgICAg fCAgIDQgKy0KIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jIHwgICAyICsK IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oIHwgICAyICsKIGRyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfZHNpLmMgICAgIHwgODY2ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kc2kuaCAgICAgfCAg NTggKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX21pcGlfdHguYyB8IDQ4NyArKysr KysrKysrKysrKysrKysKIDcgZmlsZXMgY2hhbmdlZCwgMTQyMSBpbnNlcnRpb25zKCspLCAxIGRl bGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19kc2kuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZHNpLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX21p cGlfdHguYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnIGIv ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKaW5kZXggOGRhZDg5Mi4uYjdlMDQwNCAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKKysrIGIvZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKQEAgLTMsNiArMyw5IEBAIGNvbmZpZyBEUk1fTUVE SUFURUsKIAlkZXBlbmRzIG9uIERSTQogCWRlcGVuZHMgb24gQVJDSF9NRURJQVRFSyB8fCAoQVJN ICYmIENPTVBJTEVfVEVTVCkKIAlzZWxlY3QgRFJNX0tNU19IRUxQRVIKKwlzZWxlY3QgRFJNX01J UElfRFNJCisJc2VsZWN0IERSTV9QQU5FTAorCXNlbGVjdCBEUk1fUEFORUxfU0lNUExFCiAJc2Vs ZWN0IElPTU1VX0RNQQogCXNlbGVjdCBNVEtfU01JCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01h a2VmaWxlCmluZGV4IGQ0YmRlN2MuLmU3ODFkYjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2Vm aWxlCkBAIC02LDYgKzYsOCBAQCBtZWRpYXRlay1kcm0teSA6PSBtdGtfZGlzcF9vdmwubyBcCiAJ CSAgbXRrX2RybV9kcnYubyBcCiAJCSAgbXRrX2RybV9mYi5vIFwKIAkJICBtdGtfZHJtX2dlbS5v IFwKLQkJICBtdGtfZHJtX3BsYW5lLm8KKwkJICBtdGtfZHJtX3BsYW5lLm8gXAorCQkgIG10a19k c2kubyBcCisJCSAgbXRrX21pcGlfdHgubwogCiBvYmotJChDT05GSUdfRFJNX01FRElBVEVLKSAr PSBtZWRpYXRlay1kcm0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYwppbmRl eCBkMjY4ZTVkLi5lZDhiYzNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYu YwpAQCAtNTM4LDYgKzUzOCw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICogY29u c3QgbXRrX2RybV9kcml2ZXJzW10gPSB7CiAJJm10a19kcm1fcGxhdGZvcm1fZHJpdmVyLAogCSZt dGtfZGlzcF9vdmxfZHJpdmVyLAogCSZtdGtfZGlzcF9yZG1hX2RyaXZlciwKKwkmbXRrX2RzaV9k cml2ZXIsCisJJm10a19taXBpX3R4X2RyaXZlciwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG10 a19kcm1faW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19kcm1fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaAppbmRl eCA3YTVjYjE3Li4yY2QwNGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYu aApAQCAtNDksNSArNDksNyBAQCBzdHJ1Y3QgbXRrX2RybV9wcml2YXRlIHsKIAogZXh0ZXJuIHN0 cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2Rpc3Bfb3ZsX2RyaXZlcjsKIGV4dGVybiBzdHJ1Y3Qg cGxhdGZvcm1fZHJpdmVyIG10a19kaXNwX3JkbWFfZHJpdmVyOworZXh0ZXJuIHN0cnVjdCBwbGF0 Zm9ybV9kcml2ZXIgbXRrX2RzaV9kcml2ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZl ciBtdGtfbWlwaV90eF9kcml2ZXI7CiAKICNlbmRpZiAvKiBNVEtfRFJNX0RSVl9IICovCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5jIGIvZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19kc2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li5lMjc0ZTBiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19kc2kuYwpAQCAtMCwwICsxLDg2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRp YVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWlj X2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxk cm0vZHJtX21pcGlfZHNpLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorI2luY2x1ZGUg PGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGxp bnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51 eC9vZl9ncmFwaC5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKyNpbmNsdWRlIDxsaW51 eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4KKworI2lu Y2x1ZGUgIm10a19kc2kuaCIKKworI2RlZmluZSBEU0lfVklERU9fRklGT19ERVBUSAkoMTkyMCAv IDQpCisjZGVmaW5lIERTSV9IT1NUX0ZJRk9fREVQVEgJNjQKKworI2RlZmluZSBEU0lfU1RBUlQJ CTB4MDAKKworI2RlZmluZSBEU0lfQ09OX0NUUkwJCTB4MTAKKyNkZWZpbmUgRFNJX1JFU0VUCQkJ QklUKDApCisjZGVmaW5lIERTSV9FTgkJCQlCSVQoMSkKKworI2RlZmluZSBEU0lfTU9ERV9DVFJM CQkweDE0CisjZGVmaW5lIE1PREUJCQkJKDMpCisjZGVmaW5lIENNRF9NT0RFCQkJMAorI2RlZmlu ZSBTWU5DX1BVTFNFX01PREUJCQkxCisjZGVmaW5lIFNZTkNfRVZFTlRfTU9ERQkJCTIKKyNkZWZp bmUgQlVSU1RfTU9ERQkJCTMKKyNkZWZpbmUgRlJNX01PREUJCQlCSVQoMTYpCisjZGVmaW5lIE1J WF9NT0RFCQkJQklUKDE3KQorCisjZGVmaW5lIERTSV9UWFJYX0NUUkwJCTB4MTgKKyNkZWZpbmUg VkNfTlVNCQkJCSgyIDw8IDApCisjZGVmaW5lIExBTkVfTlVNCQkJKDB4ZiA8PCAyKQorI2RlZmlu ZSBESVNfRU9UCQkJCUJJVCg2KQorI2RlZmluZSBOVUxMX0VOCQkJCUJJVCg3KQorI2RlZmluZSBU RV9GUkVFUlVOCQkJQklUKDgpCisjZGVmaW5lIEVYVF9URV9FTgkJCUJJVCg5KQorI2RlZmluZSBF WFRfVEVfRURHRQkJCUJJVCgxMCkKKyNkZWZpbmUgTUFYX1JUTl9TSVpFCQkJKDB4ZiA8PCAxMikK KyNkZWZpbmUgSFNUWF9DS0xQX0VOCQkJQklUKDE2KQorCisjZGVmaW5lIERTSV9QU0NUUkwJCTB4 MWMKKyNkZWZpbmUgRFNJX1BTX1dDCQkJMHgzZmZmCisjZGVmaW5lIERTSV9QU19TRUwJCQkoMyA8 PCAxNikKKyNkZWZpbmUgUEFDS0VEX1BTXzE2QklUX1JHQjU2NQkJKDAgPDwgMTYpCisjZGVmaW5l IExPT1NFTFlfUFNfMThCSVRfUkdCNjY2CQkoMSA8PCAxNikKKyNkZWZpbmUgUEFDS0VEX1BTXzE4 QklUX1JHQjY2NgkJKDIgPDwgMTYpCisjZGVmaW5lIFBBQ0tFRF9QU18yNEJJVF9SR0I4ODgJCSgz IDw8IDE2KQorCisjZGVmaW5lIERTSV9WU0FfTkwJCTB4MjAKKyNkZWZpbmUgRFNJX1ZCUF9OTAkJ MHgyNAorI2RlZmluZSBEU0lfVkZQX05MCQkweDI4CisjZGVmaW5lIERTSV9WQUNUX05MCQkweDJD CisjZGVmaW5lIERTSV9IU0FfV0MJCTB4NTAKKyNkZWZpbmUgRFNJX0hCUF9XQwkJMHg1NAorI2Rl ZmluZSBEU0lfSEZQX1dDCQkweDU4CisKKyNkZWZpbmUgRFNJX0hTVFhfQ0tMX1dDCQkweDY0CisK KyNkZWZpbmUgRFNJX1BIWV9MQ0NPTgkJMHgxMDQKKyNkZWZpbmUgTENfSFNfVFhfRU4JCQlCSVQo MCkKKyNkZWZpbmUgTENfVUxQTV9FTgkJCUJJVCgxKQorI2RlZmluZSBMQ19XQUtFVVBfRU4JCQlC SVQoMikKKworI2RlZmluZSBEU0lfUEhZX0xEMENPTgkJMHgxMDgKKyNkZWZpbmUgTEQwX0hTX1RY X0VOCQkJQklUKDApCisjZGVmaW5lIExEMF9VTFBNX0VOCQkJQklUKDEpCisjZGVmaW5lIExEMF9X QUtFVVBfRU4JCQlCSVQoMikKKworI2RlZmluZSBEU0lfUEhZX1RJTUVDT04wCTB4MTEwCisjZGVm aW5lIExQWAkJCQkoMHhmZiA8PCAwKQorI2RlZmluZSBIU19QUlBSCQkJCSgweGZmIDw8IDgpCisj ZGVmaW5lIEhTX1pFUk8JCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lIEhTX1RSQUlMCQkJKDB4ZmYg PDwgMjQpCisKKyNkZWZpbmUgRFNJX1BIWV9USU1FQ09OMQkweDExNAorI2RlZmluZSBUQV9HTwkJ CQkoMHhmZiA8PCAwKQorI2RlZmluZSBUQV9TVVJFCQkJCSgweGZmIDw8IDgpCisjZGVmaW5lIFRB X0dFVAkJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgREFfSFNfRVhJVAkJCSgweGZmIDw8IDI0KQor CisjZGVmaW5lIERTSV9QSFlfVElNRUNPTjIJMHgxMTgKKyNkZWZpbmUgQ09OVF9ERVQJCQkoMHhm ZiA8PCAwKQorI2RlZmluZSBDTEtfWkVSTwkJCSgweGZmIDw8IDE2KQorI2RlZmluZSBDTEtfVFJB SUwJCQkoMHhmZiA8PCAyNCkKKworI2RlZmluZSBEU0lfUEhZX1RJTUVDT04zCTB4MTFjCisjZGVm aW5lIENMS19IU19QUlBSCQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgQ0xLX0hTX1BPU1QJCQkoMHhm ZiA8PCA4KQorI2RlZmluZSBDTEtfSFNfRVhJVAkJCSgweGZmIDw8IDE2KQorCisjZGVmaW5lIE5T X1RPX0NZQ0xFKG4sIGMpICAgICgobikgLyAoYykgKyAoKChuKSAlIChjKSkgPyAxIDogMCkpCisK K3N0YXRpYyB2b2lkIG10a19kc2lfbWFzayhzdHJ1Y3QgbXRrX2RzaSAqZHNpLCB1MzIgb2Zmc2V0 LCB1MzIgbWFzaywgdTMyIGRhdGEpCit7CisJdTMyIHRlbXAgPSByZWFkbChkc2ktPnJlZ3MgKyBv ZmZzZXQpOworCisJd3JpdGVsKCh0ZW1wICYgfm1hc2spIHwgKGRhdGEgJiBtYXNrKSwgZHNpLT5y ZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgZHNpX3BoeV90aW1jb25maWcoc3RydWN0 IG10a19kc2kgKmRzaSkKK3sKKwl1MzIgdGltY29uMCwgdGltY29uMSwgdGltY29uMiwgdGltY29u MzsKKwl1bnNpZ25lZCBpbnQgdWksIGN5Y2xlX3RpbWU7CisJdW5zaWduZWQgaW50IGxweDsKKwor CXVpID0gMTAwMCAvIGRzaS0+ZGF0YV9yYXRlICsgMHgwMTsKKwljeWNsZV90aW1lID0gODAwMCAv IGRzaS0+ZGF0YV9yYXRlICsgMHgwMTsKKwlscHggPSA1OworCisJdGltY29uMCA9ICg4IDw8IDI0 KSB8ICgweGEgPDwgMTYpIHwgKDB4NiA8PCA4KSB8IGxweDsKKwl0aW1jb24xID0gKDcgPDwgMjQp IHwgKDUgKiBscHggPDwgMTYpIHwgKCgzICogbHB4KSAvIDIpIDw8IDggfAorCQkgICg0ICogbHB4 KTsKKwl0aW1jb24yID0gKChOU19UT19DWUNMRSgweDY0LCBjeWNsZV90aW1lKSArIDB4YSkgPDwg MjQpIHwKKwkJICAoTlNfVE9fQ1lDTEUoMHgxNTAsIGN5Y2xlX3RpbWUpIDw8IDE2KTsKKwl0aW1j b24zID0gKDIgKiBscHgpIDw8IDE2IHwgTlNfVE9fQ1lDTEUoODAgKyA1MiAqIHVpLCBjeWNsZV90 aW1lKSA8PCA4IHwKKwkJICAgTlNfVE9fQ1lDTEUoMHg0MCwgY3ljbGVfdGltZSk7CisKKwl3cml0 ZWwodGltY29uMCwgZHNpLT5yZWdzICsgRFNJX1BIWV9USU1FQ09OMCk7CisJd3JpdGVsKHRpbWNv bjEsIGRzaS0+cmVncyArIERTSV9QSFlfVElNRUNPTjEpOworCXdyaXRlbCh0aW1jb24yLCBkc2kt PnJlZ3MgKyBEU0lfUEhZX1RJTUVDT04yKTsKKwl3cml0ZWwodGltY29uMywgZHNpLT5yZWdzICsg RFNJX1BIWV9USU1FQ09OMyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfZW5hYmxlKHN0cnVj dCBtdGtfZHNpICpkc2kpCit7CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX0NPTl9DVFJMLCBEU0lf RU4sIERTSV9FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfZGlzYWJsZShzdHJ1Y3QgbXRr X2RzaSAqZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERTSV9DT05fQ1RSTCwgRFNJX0VOLCAw KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9yZXNldChzdHJ1Y3QgbXRrX2RzaSAqZHNpKQor eworCW10a19kc2lfbWFzayhkc2ksIERTSV9DT05fQ1RSTCwgRFNJX1JFU0VULCBEU0lfUkVTRVQp OworCW10a19kc2lfbWFzayhkc2ksIERTSV9DT05fQ1RSTCwgRFNJX1JFU0VULCAwKTsKK30KKwor c3RhdGljIGludCBtdGtfZHNpX3Bvd2Vyb24oc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRldjsKKwlpbnQgcmV0OworCisJaWYgKCsrZHNpLT5yZWZj b3VudCAhPSAxKQorCQlyZXR1cm4gMDsKKworCS8qKgorCSAqIGRhdGFfcmF0ZSA9IChwaXhlbF9j bG9jayAvIDEwMDApICogcGl4ZWxfZGlwdGggKiBtaXBpX3JhdGlvOworCSAqIHBpeGVsX2Nsb2Nr IHVuaXQgaXMgS2h6LCBkYXRhX3JhdGEgdW5pdCBpcyBNSHosIHNvIG5lZWQgZGl2aWRlIDEwMDAu CisJICogbWlwaV9yYXRpbyBpcyBtaXBpIGNsayBjb2VmZmljaWVudCBmb3IgYmFsYW5jZSB0aGUg cGl4ZWwgY2xrIGluIG1pcGkuCisJICogd2Ugc2V0IG1pcGlfcmF0aW8gaXMgMS4wNS4KKwkgKi8K Kwlkc2ktPmRhdGFfcmF0ZSA9IGRzaS0+dm0ucGl4ZWxjbG9jayAqIDMgKiAyMSAvICgxICogMTAw MCAqIDEwKTsKKworCXJldCA9IGNsa19zZXRfcmF0ZShkc2ktPmhzX2NsaywgZHNpLT5kYXRhX3Jh dGUgKiAxMDAwMDAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0 byBzZXQgZGF0YSByYXRlOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfcmVmY291bnQ7CisJfQor CisJcGh5X3Bvd2VyX29uKGRzaS0+cGh5KTsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShk c2ktPmVuZ2luZV9jbGspOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVk IHRvIGVuYWJsZSBlbmdpbmUgY2xvY2s6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9waHlfcG93 ZXJfb2ZmOworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmRpZ2l0YWxfY2xr KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBlbmFibGUgZGln aXRhbCBjbG9jazogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2Rpc2FibGVfZW5naW5lX2NsazsK Kwl9CisKKwltdGtfZHNpX2VuYWJsZShkc2kpOworCW10a19kc2lfcmVzZXQoZHNpKTsKKwlkc2lf cGh5X3RpbWNvbmZpZyhkc2kpOworCisJcmV0dXJuIDA7CisKK2Vycl9kaXNhYmxlX2VuZ2luZV9j bGs6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+ZW5naW5lX2Nsayk7CitlcnJfcGh5X3Bv d2VyX29mZjoKKwlwaHlfcG93ZXJfb2ZmKGRzaS0+cGh5KTsKK2Vycl9yZWZjb3VudDoKKwlkc2kt PnJlZmNvdW50LS07CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZHNpX2Nsa191bHBf bW9kZV9lbnRlcihzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERT SV9QSFlfTENDT04sIExDX0hTX1RYX0VOLCAwKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZ X0xDQ09OLCBMQ19VTFBNX0VOLCAwKTsKK30KKworc3RhdGljIHZvaWQgZHNpX2Nsa191bHBfbW9k ZV9sZWF2ZShzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERTSV9Q SFlfTENDT04sIExDX1VMUE1fRU4sIDApOworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTEND T04sIExDX1dBS0VVUF9FTiwgTENfV0FLRVVQX0VOKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lf UEhZX0xDQ09OLCBMQ19XQUtFVVBfRU4sIDApOworfQorCitzdGF0aWMgdm9pZCBkc2lfbGFuZTBf dWxwX21vZGVfZW50ZXIoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwltdGtfZHNpX21hc2soZHNp LCBEU0lfUEhZX0xEMENPTiwgTEQwX0hTX1RYX0VOLCAwKTsKKwltdGtfZHNpX21hc2soZHNpLCBE U0lfUEhZX0xEMENPTiwgTEQwX1VMUE1fRU4sIDApOworfQorCitzdGF0aWMgdm9pZCBkc2lfbGFu ZTBfdWxwX21vZGVfbGVhdmUoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwltdGtfZHNpX21hc2so ZHNpLCBEU0lfUEhZX0xEMENPTiwgTEQwX1VMUE1fRU4sIDApOworCW10a19kc2lfbWFzayhkc2ks IERTSV9QSFlfTEQwQ09OLCBMRDBfV0FLRVVQX0VOLCBMRDBfV0FLRVVQX0VOKTsKKwltdGtfZHNp X21hc2soZHNpLCBEU0lfUEhZX0xEMENPTiwgTEQwX1dBS0VVUF9FTiwgMCk7Cit9CisKK3N0YXRp YyBib29sIGRzaV9jbGtfaHNfc3RhdGUoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwl1MzIgdG1w X3JlZzE7CisKKwl0bXBfcmVnMSA9IHJlYWRsKGRzaS0+cmVncyArIERTSV9QSFlfTENDT04pOwor CXJldHVybiAoKHRtcF9yZWcxICYgTENfSFNfVFhfRU4pID09IDEpID8gdHJ1ZSA6IGZhbHNlOwor fQorCitzdGF0aWMgdm9pZCBkc2lfY2xrX2hzX21vZGUoc3RydWN0IG10a19kc2kgKmRzaSwgYm9v bCBlbnRlcikKK3sKKwlpZiAoZW50ZXIgJiYgIWRzaV9jbGtfaHNfc3RhdGUoZHNpKSkKKwkJbXRr X2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MQ0NPTiwgTENfSFNfVFhfRU4sIExDX0hTX1RYX0VOKTsK KwllbHNlIGlmICghZW50ZXIgJiYgZHNpX2Nsa19oc19zdGF0ZShkc2kpKQorCQltdGtfZHNpX21h c2soZHNpLCBEU0lfUEhZX0xDQ09OLCBMQ19IU19UWF9FTiwgMCk7Cit9CisKK3N0YXRpYyB2b2lk IGRzaV9zZXRfbW9kZShzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXUzMiB2aWRfbW9kZSA9IENN RF9NT0RFOworCisJaWYgKGRzaS0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU8pIHsK KwkJdmlkX21vZGUgPSBTWU5DX1BVTFNFX01PREU7CisKKwkJaWYgKChkc2ktPm1vZGVfZmxhZ3Mg JiBNSVBJX0RTSV9NT0RFX1ZJREVPX0JVUlNUKSAmJgorCQkgICAgIShkc2ktPm1vZGVfZmxhZ3Mg JiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpKQorCQkJdmlkX21vZGUgPSBCVVJTVF9N T0RFOworCX0KKworCXdyaXRlbCh2aWRfbW9kZSwgZHNpLT5yZWdzICsgRFNJX01PREVfQ1RSTCk7 Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9wc19jb250cm9sX3ZhY3Qoc3RydWN0IG10a19kc2kgKmRz aSkKK3sKKwlzdHJ1Y3QgdmlkZW9tb2RlICp2bSA9ICZkc2ktPnZtOworCXUzMiBkc2lfYnVmX2Jw cCwgcHNfd2M7CisJdTMyIHBzX2JwcF9tb2RlOworCisJaWYgKGRzaS0+Zm9ybWF0ID09IE1JUElf RFNJX0ZNVF9SR0I1NjUpCisJCWRzaV9idWZfYnBwID0gMjsKKwllbHNlCisJCWRzaV9idWZfYnBw ID0gMzsKKworCXBzX3djID0gdm0tPmhhY3RpdmUgKiBkc2lfYnVmX2JwcDsKKwlwc19icHBfbW9k ZSA9IHBzX3djOworCisJc3dpdGNoIChkc2ktPmZvcm1hdCkgeworCWNhc2UgTUlQSV9EU0lfRk1U X1JHQjg4ODoKKwkJcHNfYnBwX21vZGUgfD0gUEFDS0VEX1BTXzI0QklUX1JHQjg4ODsKKwkJYnJl YWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2OgorCQlwc19icHBfbW9kZSB8PSBQQUNLRURf UFNfMThCSVRfUkdCNjY2OworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjZfUEFD S0VEOgorCQlwc19icHBfbW9kZSB8PSBMT09TRUxZX1BTXzE4QklUX1JHQjY2NjsKKwkJYnJlYWs7 CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNTY1OgorCQlwc19icHBfbW9kZSB8PSBQQUNLRURfUFNf MTZCSVRfUkdCNTY1OworCQlicmVhazsKKwl9CisKKwl3cml0ZWwodm0tPnZhY3RpdmUsIGRzaS0+ cmVncyArIERTSV9WQUNUX05MKTsKKwl3cml0ZWwocHNfYnBwX21vZGUsIGRzaS0+cmVncyArIERT SV9QU0NUUkwpOworCXdyaXRlbChwc193YywgZHNpLT5yZWdzICsgRFNJX0hTVFhfQ0tMX1dDKTsK K30KKworc3RhdGljIHZvaWQgZHNpX3J4dHhfY29udHJvbChzdHJ1Y3QgbXRrX2RzaSAqZHNpKQor eworCXUzMiB0bXBfcmVnOworCisJc3dpdGNoIChkc2ktPmxhbmVzKSB7CisJY2FzZSAxOgorCQl0 bXBfcmVnID0gMSA8PCAyOworCQlicmVhazsKKwljYXNlIDI6CisJCXRtcF9yZWcgPSAzIDw8IDI7 CisJCWJyZWFrOworCWNhc2UgMzoKKwkJdG1wX3JlZyA9IDcgPDwgMjsKKwkJYnJlYWs7CisJY2Fz ZSA0OgorCQl0bXBfcmVnID0gMHhmIDw8IDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXRtcF9y ZWcgPSAweGYgPDwgMjsKKwkJYnJlYWs7CisJfQorCisJd3JpdGVsKHRtcF9yZWcsIGRzaS0+cmVn cyArIERTSV9UWFJYX0NUUkwpOworfQorCitzdGF0aWMgdm9pZCBkc2lfcHNfY29udHJvbChzdHJ1 Y3QgbXRrX2RzaSAqZHNpKQoreworCXVuc2lnbmVkIGludCBkc2lfdG1wX2J1Zl9icHA7CisJdTMy IHRtcF9yZWc7CisKKwlzd2l0Y2ggKGRzaS0+Zm9ybWF0KSB7CisJY2FzZSBNSVBJX0RTSV9GTVRf UkdCODg4OgorCQl0bXBfcmVnID0gUEFDS0VEX1BTXzI0QklUX1JHQjg4ODsKKwkJZHNpX3RtcF9i dWZfYnBwID0gMzsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2OgorCQl0bXBf cmVnID0gTE9PU0VMWV9QU18xOEJJVF9SR0I2NjY7CisJCWRzaV90bXBfYnVmX2JwcCA9IDM7CisJ CWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2Nl9QQUNLRUQ6CisJCXRtcF9yZWcgPSBQ QUNLRURfUFNfMThCSVRfUkdCNjY2OworCQlkc2lfdG1wX2J1Zl9icHAgPSAzOworCQlicmVhazsK KwljYXNlIE1JUElfRFNJX0ZNVF9SR0I1NjU6CisJCXRtcF9yZWcgPSBQQUNLRURfUFNfMTZCSVRf UkdCNTY1OworCQlkc2lfdG1wX2J1Zl9icHAgPSAyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl0 bXBfcmVnID0gUEFDS0VEX1BTXzI0QklUX1JHQjg4ODsKKwkJZHNpX3RtcF9idWZfYnBwID0gMzsK KwkJYnJlYWs7CisJfQorCisJdG1wX3JlZyArPSBkc2ktPnZtLmhhY3RpdmUgKiBkc2lfdG1wX2J1 Zl9icHAgJiBEU0lfUFNfV0M7CisJd3JpdGVsKHRtcF9yZWcsIGRzaS0+cmVncyArIERTSV9QU0NU UkwpOworfQorCitzdGF0aWMgdm9pZCBkc2lfY29uZmlnX3Zkb190aW1pbmcoc3RydWN0IG10a19k c2kgKmRzaSkKK3sKKwl1bnNpZ25lZCBpbnQgaG9yaXpvbnRhbF9zeW5jX2FjdGl2ZV9ieXRlOwor CXVuc2lnbmVkIGludCBob3Jpem9udGFsX2JhY2twb3JjaF9ieXRlOworCXVuc2lnbmVkIGludCBo b3Jpem9udGFsX2Zyb250cG9yY2hfYnl0ZTsKKwl1bnNpZ25lZCBpbnQgZHNpX3RtcF9idWZfYnBw OworCisJc3RydWN0IHZpZGVvbW9kZSAqdm0gPSAmZHNpLT52bTsKKworCWlmIChkc2ktPmZvcm1h dCA9PSBNSVBJX0RTSV9GTVRfUkdCNTY1KQorCQlkc2lfdG1wX2J1Zl9icHAgPSAyOworCWVsc2UK KwkJZHNpX3RtcF9idWZfYnBwID0gMzsKKworCXdyaXRlbCh2bS0+dnN5bmNfbGVuLCBkc2ktPnJl Z3MgKyBEU0lfVlNBX05MKTsKKwl3cml0ZWwodm0tPnZiYWNrX3BvcmNoLCBkc2ktPnJlZ3MgKyBE U0lfVkJQX05MKTsKKwl3cml0ZWwodm0tPnZmcm9udF9wb3JjaCwgZHNpLT5yZWdzICsgRFNJX1ZG UF9OTCk7CisJd3JpdGVsKHZtLT52YWN0aXZlLCBkc2ktPnJlZ3MgKyBEU0lfVkFDVF9OTCk7CisK Kwlob3Jpem9udGFsX3N5bmNfYWN0aXZlX2J5dGUgPSAodm0tPmhzeW5jX2xlbiAqIGRzaV90bXBf YnVmX2JwcCAtIDEwKTsKKworCWlmIChkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJ REVPX1NZTkNfUFVMU0UpCisJCWhvcml6b250YWxfYmFja3BvcmNoX2J5dGUgPQorCQkJKHZtLT5o YmFja19wb3JjaCAqIGRzaV90bXBfYnVmX2JwcCAtIDEwKTsKKwllbHNlCisJCWhvcml6b250YWxf YmFja3BvcmNoX2J5dGUgPSAoKHZtLT5oYmFja19wb3JjaCArIHZtLT5oc3luY19sZW4pICoKKwkJ CWRzaV90bXBfYnVmX2JwcCAtIDEwKTsKKworCWhvcml6b250YWxfZnJvbnRwb3JjaF9ieXRlID0g KHZtLT5oZnJvbnRfcG9yY2ggKiBkc2lfdG1wX2J1Zl9icHAgLSAxMik7CisKKwl3cml0ZWwoaG9y aXpvbnRhbF9zeW5jX2FjdGl2ZV9ieXRlLCBkc2ktPnJlZ3MgKyBEU0lfSFNBX1dDKTsKKwl3cml0 ZWwoaG9yaXpvbnRhbF9iYWNrcG9yY2hfYnl0ZSwgZHNpLT5yZWdzICsgRFNJX0hCUF9XQyk7CisJ d3JpdGVsKGhvcml6b250YWxfZnJvbnRwb3JjaF9ieXRlLCBkc2ktPnJlZ3MgKyBEU0lfSEZQX1dD KTsKKworCWRzaV9wc19jb250cm9sKGRzaSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfc3Rh cnQoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwl3cml0ZWwoMCwgZHNpLT5yZWdzICsgRFNJX1NU QVJUKTsKKwl3cml0ZWwoMSwgZHNpLT5yZWdzICsgRFNJX1NUQVJUKTsKK30KKworc3RhdGljIHZv aWQgbXRrX2RzaV9wb3dlcm9mZihzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCWlmIChXQVJOX09O KGRzaS0+cmVmY291bnQgPT0gMCkpCisJCXJldHVybjsKKworCWlmICgtLWRzaS0+cmVmY291bnQg IT0gMCkKKwkJcmV0dXJuOworCisJZHNpX2xhbmUwX3VscF9tb2RlX2VudGVyKGRzaSk7CisJZHNp X2Nsa191bHBfbW9kZV9lbnRlcihkc2kpOworCisJbXRrX2RzaV9kaXNhYmxlKGRzaSk7CisKKwlj bGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5lbmdpbmVfY2xrKTsKKwljbGtfZGlzYWJsZV91bnBy ZXBhcmUoZHNpLT5kaWdpdGFsX2Nsayk7CisKKwlwaHlfcG93ZXJfb2ZmKGRzaS0+cGh5KTsKK30K Kworc3RhdGljIHZvaWQgbXRrX291dHB1dF9kc2lfZW5hYmxlKHN0cnVjdCBtdGtfZHNpICpkc2kp Cit7CisJaW50IHJldDsKKworCWlmIChkc2ktPmVuYWJsZWQpCisJCXJldHVybjsKKworCWlmIChk c2ktPnBhbmVsKSB7CisJCWlmIChkcm1fcGFuZWxfcHJlcGFyZShkc2ktPnBhbmVsKSkgeworCQkJ RFJNX0VSUk9SKCJmYWlsZWQgdG8gc2V0dXAgdGhlIHBhbmVsXG4iKTsKKwkJCXJldHVybjsKKwkJ fQorCX0KKworCXJldCA9IG10a19kc2lfcG93ZXJvbihkc2kpOworCWlmIChyZXQgPCAwKSB7CisJ CURSTV9FUlJPUigiZmFpbGVkIHRvIHBvd2VyIG9uIGRzaVxuIik7CisJCXJldHVybjsKKwl9CisK Kwlkc2lfcnh0eF9jb250cm9sKGRzaSk7CisKKwlkc2lfY2xrX3VscF9tb2RlX2xlYXZlKGRzaSk7 CisJZHNpX2xhbmUwX3VscF9tb2RlX2xlYXZlKGRzaSk7CisJZHNpX2Nsa19oc19tb2RlKGRzaSwg MCk7CisJZHNpX3NldF9tb2RlKGRzaSk7CisKKwlkc2lfcHNfY29udHJvbF92YWN0KGRzaSk7CisJ ZHNpX2NvbmZpZ192ZG9fdGltaW5nKGRzaSk7CisKKwlkc2lfc2V0X21vZGUoZHNpKTsKKwlkc2lf Y2xrX2hzX21vZGUoZHNpLCAxKTsKKworCW10a19kc2lfc3RhcnQoZHNpKTsKKworCWRzaS0+ZW5h YmxlZCA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdXRwdXRfZHNpX2Rpc2FibGUoc3Ry dWN0IG10a19kc2kgKmRzaSkKK3sKKwlpZiAoIWRzaS0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJ aWYgKGRzaS0+cGFuZWwpIHsKKwkJaWYgKGRybV9wYW5lbF9kaXNhYmxlKGRzaS0+cGFuZWwpKSB7 CisJCQlEUk1fRVJST1IoImZhaWxlZCB0byBkaXNhYmxlIHRoZSBwYW5lbFxuIik7CisJCQlyZXR1 cm47CisJCX0KKwl9CisKKwltdGtfZHNpX3Bvd2Vyb2ZmKGRzaSk7CisKKwlkc2ktPmVuYWJsZWQg PSBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9lbmNvZGVyX2Rlc3Ryb3koc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7 Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3MgbXRrX2RzaV9lbmNv ZGVyX2Z1bmNzID0geworCS5kZXN0cm95ID0gbXRrX2RzaV9lbmNvZGVyX2Rlc3Ryb3ksCit9Owor CitzdGF0aWMgYm9vbCBtdGtfZHNpX2VuY29kZXJfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2VuY29k ZXIgKmVuY29kZXIsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt b2RlLAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkK K3sKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9lbmNvZGVyX21vZGVf c2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICptb2RlLAorCQkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVz dGVkKQoreworCXN0cnVjdCBtdGtfZHNpICpkc2kgPSBlbmNvZGVyX3RvX2RzaShlbmNvZGVyKTsK KworCWRzaS0+dm0ucGl4ZWxjbG9jayA9IGFkanVzdGVkLT5jbG9jazsKKwlkc2ktPnZtLmhhY3Rp dmUgPSBhZGp1c3RlZC0+aGRpc3BsYXk7CisJZHNpLT52bS5oYmFja19wb3JjaCA9IGFkanVzdGVk LT5odG90YWwgLSBhZGp1c3RlZC0+aHN5bmNfZW5kOworCWRzaS0+dm0uaGZyb250X3BvcmNoID0g YWRqdXN0ZWQtPmhzeW5jX3N0YXJ0IC0gYWRqdXN0ZWQtPmhkaXNwbGF5OworCWRzaS0+dm0uaHN5 bmNfbGVuID0gYWRqdXN0ZWQtPmhzeW5jX2VuZCAtIGFkanVzdGVkLT5oc3luY19zdGFydDsKKwor CWRzaS0+dm0udmFjdGl2ZSA9IGFkanVzdGVkLT52ZGlzcGxheTsKKwlkc2ktPnZtLnZiYWNrX3Bv cmNoID0gYWRqdXN0ZWQtPnZ0b3RhbCAtIGFkanVzdGVkLT52c3luY19lbmQ7CisJZHNpLT52bS52 ZnJvbnRfcG9yY2ggPSBhZGp1c3RlZC0+dnN5bmNfc3RhcnQgLSBhZGp1c3RlZC0+dmRpc3BsYXk7 CisJZHNpLT52bS52c3luY19sZW4gPSBhZGp1c3RlZC0+dnN5bmNfZW5kIC0gYWRqdXN0ZWQtPnZz eW5jX3N0YXJ0OworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX2VuY29kZXJfZGlzYWJsZShzdHJ1 Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGVuY29k ZXJfdG9fZHNpKGVuY29kZXIpOworCisJbXRrX291dHB1dF9kc2lfZGlzYWJsZShkc2kpOworfQor CitzdGF0aWMgdm9pZCBtdGtfZHNpX2VuY29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAq ZW5jb2RlcikKK3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gZW5jb2Rlcl90b19kc2koZW5jb2Rl cik7CisKKwltdGtfb3V0cHV0X2RzaV9lbmFibGUoZHNpKTsKK30KKworc3RhdGljIGVudW0gZHJt X2Nvbm5lY3Rvcl9zdGF0dXMgbXRrX2RzaV9jb25uZWN0b3JfZGV0ZWN0KAorCXN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgZm9yY2UpCit7CisJcmV0dXJuIGNvbm5lY3Rvcl9z dGF0dXNfY29ubmVjdGVkOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX2Nvbm5lY3Rvcl9kZXN0 cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJZHJtX2Nvbm5lY3Rvcl91 bnJlZ2lzdGVyKGNvbm5lY3Rvcik7CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7 Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RzaV9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGNvbm5lY3Rv cl90b19kc2koY29ubmVjdG9yKTsKKworCXJldHVybiBkcm1fcGFuZWxfZ2V0X21vZGVzKGRzaS0+ cGFuZWwpOworfQorCitzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyICptdGtfZHNpX2Nvbm5lY3Rv cl9iZXN0X2VuY29kZXIoCisJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJ c3RydWN0IG10a19kc2kgKmRzaSA9IGNvbm5lY3Rvcl90b19kc2koY29ubmVjdG9yKTsKKworCXJl dHVybiAmZHNpLT5lbmNvZGVyOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVy X2hlbHBlcl9mdW5jcyBtdGtfZHNpX2VuY29kZXJfaGVscGVyX2Z1bmNzID0geworCS5tb2RlX2Zp eHVwID0gbXRrX2RzaV9lbmNvZGVyX21vZGVfZml4dXAsCisJLm1vZGVfc2V0ID0gbXRrX2RzaV9l bmNvZGVyX21vZGVfc2V0LAorCS5kaXNhYmxlID0gbXRrX2RzaV9lbmNvZGVyX2Rpc2FibGUsCisJ LmVuYWJsZSA9IG10a19kc2lfZW5jb2Rlcl9lbmFibGUsCit9OworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9jb25uZWN0b3JfZnVuY3MgbXRrX2RzaV9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRw bXMgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHBtcywKKwkuZGV0ZWN0ID0gbXRrX2Rz aV9jb25uZWN0b3JfZGV0ZWN0LAorCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5n bGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXN0cm95ID0gbXRrX2RzaV9jb25uZWN0b3JfZGVzdHJv eSwKKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCisJLmF0b21p Y19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRl X3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5l Y3Rvcl9kZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVj dG9yX2hlbHBlcl9mdW5jcworCW10a19kc2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwku Z2V0X21vZGVzID0gbXRrX2RzaV9jb25uZWN0b3JfZ2V0X21vZGVzLAorCS5iZXN0X2VuY29kZXIg PSBtdGtfZHNpX2Nvbm5lY3Rvcl9iZXN0X2VuY29kZXIsCit9OworCitzdGF0aWMgaW50IG10a19k cm1fYXR0YWNoX2JyaWRnZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAorCQkJCSBzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJaW50IHJldDsKKworCWlmICghYnJpZGdlKQorCQly ZXR1cm4gLUVOT0VOVDsKKworCWVuY29kZXItPmJyaWRnZSA9IGJyaWRnZTsKKwlicmlkZ2UtPmVu Y29kZXIgPSBlbmNvZGVyOworCXJldCA9IGRybV9icmlkZ2VfYXR0YWNoKGVuY29kZXItPmRldiwg YnJpZGdlKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGF0dGFjaCBicmlk Z2UgdG8gZHJtXG4iKTsKKwkJZW5jb2Rlci0+YnJpZGdlID0gTlVMTDsKKwkJYnJpZGdlLT5lbmNv ZGVyID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19kc2lf Y3JlYXRlX2Nvbm5fZW5jKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtfZHNpICpk c2kpCit7CisJaW50IHJldDsKKworCXJldCA9IGRybV9lbmNvZGVyX2luaXQoZHJtLCAmZHNpLT5l bmNvZGVyLCAmbXRrX2RzaV9lbmNvZGVyX2Z1bmNzLAorCQkJICAgICAgIERSTV9NT0RFX0VOQ09E RVJfRFNJLCBOVUxMKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuY29k ZXIgaW5pdCB0byBkcm1cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlkcm1fZW5jb2Rlcl9oZWxw ZXJfYWRkKCZkc2ktPmVuY29kZXIsICZtdGtfZHNpX2VuY29kZXJfaGVscGVyX2Z1bmNzKTsKKwor CS8qCisJICogQ3VycmVudGx5IGRpc3BsYXkgZGF0YSBwYXRocyBhcmUgc3RhdGljYWxseSBhc3Np Z25lZCB0byBhIGNydGMgZWFjaC4KKwkgKiBjcnRjIDAgaXMgT1ZMMCAtPiBDT0xPUjAgLT4gQUFM IC0+IE9EIC0+IFJETUEwIC0+IFVGT0UgLT4gRFNJMAorCSAqLworCWRzaS0+ZW5jb2Rlci5wb3Nz aWJsZV9jcnRjcyA9IDE7CisKKwkvKiBQcmUtZW1wdCBEUCBjb25uZWN0b3IgY3JlYXRpb24gaWYg dGhlcmUncyBhIGJyaWRnZSAqLworCXJldCA9IG10a19kcm1fYXR0YWNoX2JyaWRnZShkc2ktPmJy aWRnZSwgJmRzaS0+ZW5jb2Rlcik7CisJaWYgKCFyZXQpCisJCXJldHVybiAwOworCisJcmV0ID0g ZHJtX2Nvbm5lY3Rvcl9pbml0KGRybSwgJmRzaS0+Y29ubiwgJm10a19kc2lfY29ubmVjdG9yX2Z1 bmNzLAorCQkJCSBEUk1fTU9ERV9DT05ORUNUT1JfRFNJKTsKKwlpZiAocmV0KSB7CisJCURSTV9F UlJPUigiRmFpbGVkIHRvIGNvbm5lY3RvciBpbml0IHRvIGRybVxuIik7CisJCWdvdG8gZXJyX2Vu Y29kZXJfY2xlYW51cDsKKwl9CisKKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJmRzaS0+Y29u biwgJm10a19kc2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisKKwlyZXQgPSBkcm1fY29ubmVj dG9yX3JlZ2lzdGVyKCZkc2ktPmNvbm4pOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJGYWls ZWQgdG8gY29ubmVjdG9yIHJlZ2lzdGVyIHRvIGRybVxuIik7CisJCWdvdG8gZXJyX2Nvbm5lY3Rv cl9jbGVhbnVwOworCX0KKworCWRzaS0+Y29ubi5kcG1zID0gRFJNX01PREVfRFBNU19PRkY7CisJ ZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZkc2ktPmNvbm4sICZkc2ktPmVuY29k ZXIpOworCisJaWYgKGRzaS0+cGFuZWwpIHsKKwkJcmV0ID0gZHJtX3BhbmVsX2F0dGFjaChkc2kt PnBhbmVsLCAmZHNpLT5jb25uKTsKKwkJaWYgKHJldCkgeworCQkJRFJNX0VSUk9SKCJGYWlsZWQg dG8gYXR0YWNoIHBhbmVsIHRvIGRybVxuIik7CisJCQlnb3RvIGVycl9jb25uZWN0b3JfdW5yZWdp c3RlcjsKKwkJfQorCX0KKwlyZXR1cm4gMDsKKworZXJyX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyOgor CWRybV9jb25uZWN0b3JfdW5yZWdpc3RlcigmZHNpLT5jb25uKTsKK2Vycl9jb25uZWN0b3JfY2xl YW51cDoKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoJmRzaS0+Y29ubik7CitlcnJfZW5jb2Rlcl9j bGVhbnVwOgorCWRybV9lbmNvZGVyX2NsZWFudXAoJmRzaS0+ZW5jb2Rlcik7CisKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX2Rlc3Ryb3lfY29ubl9lbmMoc3RydWN0IG10 a19kc2kgKmRzaSkKK3sKKwlkcm1fZW5jb2Rlcl9jbGVhbnVwKCZkc2ktPmVuY29kZXIpOworCS8q IFNraXAgY29ubmVjdG9yIGNsZWFudXAgaWYgY3JlYXRpb24gd2FzIGRlbGVnYXRlZCB0byB0aGUg YnJpZGdlICovCisJaWYgKGRzaS0+Y29ubi5kZXYpIHsKKwkJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lz dGVyKCZkc2ktPmNvbm4pOworCQlkcm1fY29ubmVjdG9yX2NsZWFudXAoJmRzaS0+Y29ubik7CisJ fQorfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX2RkcF9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21w ICpjb21wKQoreworCXN0cnVjdCBtdGtfZHNpICpkc2kgPSBjb250YWluZXJfb2YoY29tcCwgc3Ry dWN0IG10a19kc2ksIGRkcF9jb21wKTsKKworCW10a19kc2lfcG93ZXJvbihkc2kpOworfQorCitz dGF0aWMgdm9pZCBtdGtfZHNpX2RkcF9zdG9wKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7 CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3QgbXRrX2Rz aSwgZGRwX2NvbXApOworCisJbXRrX2RzaV9wb3dlcm9mZihkc2kpOworfQorCitzdGF0aWMgY29u c3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyBtdGtfZHNpX2Z1bmNzID0geworCS5zdGFydCA9 IG10a19kc2lfZGRwX3N0YXJ0LAorCS5zdG9wID0gbXRrX2RzaV9kZHBfc3RvcCwKK307CisKK3N0 YXRpYyBpbnQgbXRrX2RzaV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAq bWFzdGVyLCB2b2lkICpkYXRhKQoreworCWludCByZXQ7CisJc3RydWN0IGRybV9kZXZpY2UgKmRy bSA9IGRhdGE7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwor CisJcmV0ID0gbXRrX2RkcF9jb21wX3JlZ2lzdGVyKGRybSwgJmRzaS0+ZGRwX2NvbXApOworCWlm IChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvbXBvbmVu dCAlczogJWRcbiIsCisJCQlkZXYtPm9mX25vZGUtPmZ1bGxfbmFtZSwgcmV0KTsKKwkJcmV0dXJu IHJldDsKKwl9CisKKwlyZXQgPSBtdGtfZHNpX2NyZWF0ZV9jb25uX2VuYyhkcm0sIGRzaSk7CisJ aWYgKHJldCkgeworCQlEUk1fRVJST1IoIkVuY29kZXIgY3JlYXRlIGZhaWxlZCB3aXRoICVkXG4i LCByZXQpOworCQlnb3RvIGVycl91bnJlZ2lzdGVyOworCX0KKworCXJldHVybiAwOworCitlcnJf dW5yZWdpc3RlcjoKKwltdGtfZGRwX2NvbXBfdW5yZWdpc3Rlcihkcm0sICZkc2ktPmRkcF9jb21w KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX3VuYmluZChzdHJ1Y3Qg ZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCSAgIHZvaWQgKmRhdGEpCit7 CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRhdGE7CisJc3RydWN0IG10a19kc2kgKmRzaSA9 IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJbXRrX2RzaV9kZXN0cm95X2Nvbm5fZW5jKGRzaSk7 CisJbXRrX2RkcF9jb21wX3VucmVnaXN0ZXIoZHJtLCAmZHNpLT5kZHBfY29tcCk7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBtdGtfZHNpX2NvbXBvbmVudF9vcHMgPSB7 CisJLmJpbmQgPSBtdGtfZHNpX2JpbmQsCisJLnVuYmluZCA9IG10a19kc2lfdW5iaW5kLAorfTsK Kworc3RhdGljIGludCBtdGtfZHNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp Cit7CisJc3RydWN0IG10a19kc2kgKmRzaTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ ZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcmVtb3RlX25vZGUsICplbmRwb2ludDsKKwlzdHJ1 Y3QgcmVzb3VyY2UgKnJlZ3M7CisJaW50IGNvbXBfaWQ7CisJaW50IHJldDsKKworCWRzaSA9IGRl dm1fa3phbGxvYyhkZXYsIHNpemVvZigqZHNpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkc2kpCisJ CXJldHVybiAtRU5PTUVNOworCisJZHNpLT5tb2RlX2ZsYWdzID0gTUlQSV9EU0lfTU9ERV9WSURF TyB8IE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxTRTsKKwlkc2ktPmZvcm1hdCA9IE1JUElf RFNJX0ZNVF9SR0I4ODg7CisJZHNpLT5sYW5lcyA9IDQ7CisKKwllbmRwb2ludCA9IG9mX2dyYXBo X2dldF9uZXh0X2VuZHBvaW50KGRldi0+b2Zfbm9kZSwgTlVMTCk7CisJaWYgKGVuZHBvaW50KSB7 CisJCXJlbW90ZV9ub2RlID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3BhcmVudChlbmRwb2lu dCk7CisJCWlmICghcmVtb3RlX25vZGUpIHsKKwkJCWRldl9lcnIoZGV2LCAiTm8gcGFuZWwgY29u bmVjdGVkXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJZHNpLT5icmlkZ2UgPSBv Zl9kcm1fZmluZF9icmlkZ2UocmVtb3RlX25vZGUpOworCQlkc2ktPnBhbmVsID0gb2ZfZHJtX2Zp bmRfcGFuZWwocmVtb3RlX25vZGUpOworCQlvZl9ub2RlX3B1dChyZW1vdGVfbm9kZSk7CisJCWlm ICghZHNpLT5icmlkZ2UgJiYgIWRzaS0+cGFuZWwpIHsKKwkJCWRldl9pbmZvKGRldiwgIldhaXRp bmcgZm9yIGJyaWRnZSBvciBwYW5lbCBkcml2ZXJcbiIpOworCQkJcmV0dXJuIC1FUFJPQkVfREVG RVI7CisJCX0KKwl9CisKKwlkc2ktPmVuZ2luZV9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiZW5n aW5lIik7CisJaWYgKElTX0VSUihkc2ktPmVuZ2luZV9jbGspKSB7CisJCXJldCA9IFBUUl9FUlIo ZHNpLT5lbmdpbmVfY2xrKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGVuZ2luZSBj bG9jazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZHNpLT5kaWdpdGFsX2Ns ayA9IGRldm1fY2xrX2dldChkZXYsICJkaWdpdGFsIik7CisJaWYgKElTX0VSUihkc2ktPmRpZ2l0 YWxfY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGRzaS0+ZGlnaXRhbF9jbGspOworCQlkZXZfZXJy KGRldiwgIkZhaWxlZCB0byBnZXQgZGlnaXRhbCBjbG9jazogJWRcbiIsIHJldCk7CisJCXJldHVy biByZXQ7CisJfQorCisJZHNpLT5oc19jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiaHMiKTsKKwlp ZiAoSVNfRVJSKGRzaS0+aHNfY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGRzaS0+aHNfY2xrKTsK KwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGhzIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwlyZWdzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElP UkVTT1VSQ0VfTUVNLCAwKTsKKwlkc2ktPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2 LCByZWdzKTsKKwlpZiAoSVNfRVJSKGRzaS0+cmVncykpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2kt PnJlZ3MpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpb3JlbWFwIG1lbW9yeTogJWRcbiIs IHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZHNpLT5waHkgPSBkZXZtX3BoeV9nZXQoZGV2 LCAiZHBoeSIpOworCWlmIChJU19FUlIoZHNpLT5waHkpKSB7CisJCXJldCA9IFBUUl9FUlIoZHNp LT5waHkpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgTUlQSS1EUEhZOiAlZFxuIiwg cmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwljb21wX2lkID0gbXRrX2RkcF9jb21wX2dldF9p ZChkZXYtPm9mX25vZGUsIE1US19EU0kpOworCWlmIChjb21wX2lkIDwgMCkgeworCQlkZXZfZXJy KGRldiwgIkZhaWxlZCB0byBpZGVudGlmeSBieSBhbGlhczogJWRcbiIsIGNvbXBfaWQpOworCQly ZXR1cm4gY29tcF9pZDsKKwl9CisKKwlyZXQgPSBtdGtfZGRwX2NvbXBfaW5pdChkZXYsIGRldi0+ b2Zfbm9kZSwgJmRzaS0+ZGRwX2NvbXAsIGNvbXBfaWQsCisJCQkJJm10a19kc2lfZnVuY3MpOwor CWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb21wb25l bnQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZk YXRhKHBkZXYsIGRzaSk7CisKKwlyZXQgPSBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZtdGtf ZHNpX2NvbXBvbmVudF9vcHMpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQg dG8gYWRkIERTSSBjb21wb25lbnRcbiIpOworCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwl9CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfZHNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdGtfZHNpICpkc2kgPSBwbGF0Zm9ybV9nZXRf ZHJ2ZGF0YShwZGV2KTsKKworCW10a19vdXRwdXRfZHNpX2Rpc2FibGUoZHNpKTsKKwljb21wb25l bnRfZGVsKCZwZGV2LT5kZXYsICZtdGtfZHNpX2NvbXBvbmVudF9vcHMpOworCisJcmV0dXJuIDA7 Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgbXRrX2RzaV9zdXNwZW5kKHN0cnVj dCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpOworCisJZHNpID0gZGV2X2dl dF9kcnZkYXRhKGRldik7CisKKwltdGtfb3V0cHV0X2RzaV9kaXNhYmxlKGRzaSk7CisJRFJNX0RF QlVHX0RSSVZFUigiZHNpIHN1c3BlbmQgc3VjY2VzcyFcbiIpOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgbXRrX2RzaV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVj dCBtdGtfZHNpICpkc2k7CisKKwlkc2kgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCW10a19v dXRwdXRfZHNpX2VuYWJsZShkc2kpOworCURSTV9ERUJVR19EUklWRVIoImRzaSByZXN1bWUgc3Vj Y2VzcyFcbiIpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKK3N0YXRpYyBTSU1QTEVfREVWX1BN X09QUyhtdGtfZHNpX3BtX29wcywgbXRrX2RzaV9zdXNwZW5kLCBtdGtfZHNpX3Jlc3VtZSk7CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19kc2lfb2ZfbWF0Y2hbXSA9IHsK Kwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kc2kiIH0sCisJeyB9LAorfTsKKwor c3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZHNpX2RyaXZlciA9IHsKKwkucHJvYmUgPSBtdGtf ZHNpX3Byb2JlLAorCS5yZW1vdmUgPSBtdGtfZHNpX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQku bmFtZSA9ICJtdGstZHNpIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX2RzaV9vZl9tYXRjaCwK KwkJLnBtID0gJm10a19kc2lfcG1fb3BzLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19kc2kuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZHNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc4MGFmYwotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHNpLmgKQEAgLTAsMCAr MSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICog VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYg X01US19EU0lfSF8KKyNkZWZpbmUgX01US19EU0lfSF8KKworI2luY2x1ZGUgPGRybS9kcm1fY3J0 Yy5oPgorCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorCitzdHJ1Y3QgcGh5OworCitz dHJ1Y3QgbXRrX2RzaSB7CisJc3RydWN0IG10a19kZHBfY29tcCBkZHBfY29tcDsKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXY7CisJc3RydWN0IGRybV9lbmNvZGVyIGVuY29kZXI7CisJc3RydWN0IGRybV9j b25uZWN0b3IgY29ubjsKKwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsKKwlzdHJ1Y3QgZHJtX2Jy aWRnZSAqYnJpZGdlOworCXN0cnVjdCBwaHkgKnBoeTsKKworCXZvaWQgX19pb21lbSAqcmVnczsK KworCXN0cnVjdCBjbGsgKmVuZ2luZV9jbGs7CisJc3RydWN0IGNsayAqZGlnaXRhbF9jbGs7CisJ c3RydWN0IGNsayAqaHNfY2xrOworCisJdTMyIGRhdGFfcmF0ZTsKKworCXVuc2lnbmVkIGxvbmcg bW9kZV9mbGFnczsKKwllbnVtIG1pcGlfZHNpX3BpeGVsX2Zvcm1hdCBmb3JtYXQ7CisJdW5zaWdu ZWQgaW50IGxhbmVzOworCXN0cnVjdCB2aWRlb21vZGUgdm07CisJaW50IHJlZmNvdW50OworCWJv b2wgZW5hYmxlZDsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19kc2kgKmVuY29kZXJf dG9fZHNpKHN0cnVjdCBkcm1fZW5jb2RlciAqZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGUs IHN0cnVjdCBtdGtfZHNpLCBlbmNvZGVyKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRr X2RzaSAqY29ubmVjdG9yX3RvX2RzaShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqYykKK3sKKwlyZXR1 cm4gY29udGFpbmVyX29mKGMsIHN0cnVjdCBtdGtfZHNpLCBjb25uKTsKK30KKworI2VuZGlmCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX21pcGlfdHguYyBiL2RyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbWlwaV90eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmIxZThlMzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX21pcGlfdHguYwpAQCAtMCwwICsxLDQ4NyBAQAorLyoKKyAqIENvcHlyaWdo dCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFz CisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRl IDxsaW51eC9jbGstcHJvdmlkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1 ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGlu dXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgorCisjZGVm aW5lIE1JUElUWF9EU0lfQ09OCQkweDAwCisjZGVmaW5lIFJHX0RTSV9MRE9DT1JFX0VOCQlCSVQo MCkKKyNkZWZpbmUgUkdfRFNJX0NLR19MRE9PVVRfRU4JCUJJVCgxKQorI2RlZmluZSBSR19EU0lf QkNMS19TRUwJCQkoMyA8PCAyKQorI2RlZmluZSBSR19EU0lfTERfSURYX1NFTAkJKDcgPDwgNCkK KyNkZWZpbmUgUkdfRFNJX1BIWUNMS19TRUwJCSgyIDw8IDgpCisjZGVmaW5lIFJHX0RTSV9EU0lD TEtfRlJFUV9TRUwJCUJJVCgxMCkKKyNkZWZpbmUgUkdfRFNJX0xQVFhfQ0xNUF9FTgkJQklUKDEx KQorCisjZGVmaW5lIE1JUElUWF9EU0lfQ0xPQ0tfTEFORQkweDA0CisjZGVmaW5lIFJHX0RTSV9M TlRDX0xET09VVF9FTgkJQklUKDApCisjZGVmaW5lIFJHX0RTSV9MTlRDX0NLTEFORV9FTgkJQklU KDEpCisjZGVmaW5lIFJHX0RTSV9MTlRDX0xQVFhfSVBMVVMxCQlCSVQoMikKKyNkZWZpbmUgUkdf RFNJX0xOVENfTFBUWF9JUExVUzIJCUJJVCgzKQorI2RlZmluZSBSR19EU0lfTE5UQ19MUFRYX0lN SU5VUwkJQklUKDQpCisjZGVmaW5lIFJHX0RTSV9MTlRDX0xQQ0RfSVBMVVMJCUJJVCg1KQorI2Rl ZmluZSBSR19EU0lfTE5UQ19MUENEX0lNTFVTCQlCSVQoNikKKyNkZWZpbmUgUkdfRFNJX0xOVENf UlRfQ09ERQkJKDB4ZiA8PCA4KQorCisjZGVmaW5lIE1JUElUWF9EU0lfREFUQV9MQU5FMAkweDA4 CisjZGVmaW5lIFJHX0RTSV9MTlQwX0xET09VVF9FTgkJQklUKDApCisjZGVmaW5lIFJHX0RTSV9M TlQwX0NLTEFORV9FTgkJQklUKDEpCisjZGVmaW5lIFJHX0RTSV9MTlQwX0xQVFhfSVBMVVMxCQlC SVQoMikKKyNkZWZpbmUgUkdfRFNJX0xOVDBfTFBUWF9JUExVUzIJCUJJVCgzKQorI2RlZmluZSBS R19EU0lfTE5UMF9MUFRYX0lNSU5VUwkJQklUKDQpCisjZGVmaW5lIFJHX0RTSV9MTlQwX0xQQ0Rf SVBMVVMJCUJJVCg1KQorI2RlZmluZSBSR19EU0lfTE5UMF9MUENEX0lNSU5VUwkJQklUKDYpCisj ZGVmaW5lIFJHX0RTSV9MTlQwX1JUX0NPREUJCSgweGYgPDwgOCkKKworI2RlZmluZSBNSVBJVFhf RFNJX0RBVEFfTEFORTEJMHgwYworI2RlZmluZSBSR19EU0lfTE5UMV9MRE9PVVRfRU4JCUJJVCgw KQorI2RlZmluZSBSR19EU0lfTE5UMV9DS0xBTkVfRU4JCUJJVCgxKQorI2RlZmluZSBSR19EU0lf TE5UMV9MUFRYX0lQTFVTMQkJQklUKDIpCisjZGVmaW5lIFJHX0RTSV9MTlQxX0xQVFhfSVBMVVMy CQlCSVQoMykKKyNkZWZpbmUgUkdfRFNJX0xOVDFfTFBUWF9JTUlOVVMJCUJJVCg0KQorI2RlZmlu ZSBSR19EU0lfTE5UMV9MUENEX0lQTFVTCQlCSVQoNSkKKyNkZWZpbmUgUkdfRFNJX0xOVDFfTFBD RF9JTUlOVVMJCUJJVCg2KQorI2RlZmluZSBSR19EU0lfTE5UMV9SVF9DT0RFCQkoMHhmIDw8IDgp CisKKyNkZWZpbmUgTUlQSVRYX0RTSV9EQVRBX0xBTkUyCTB4MTAKKyNkZWZpbmUgUkdfRFNJX0xO VDJfTERPT1VUX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX0xOVDJfQ0tMQU5FX0VOCQlCSVQo MSkKKyNkZWZpbmUgUkdfRFNJX0xOVDJfTFBUWF9JUExVUzEJCUJJVCgyKQorI2RlZmluZSBSR19E U0lfTE5UMl9MUFRYX0lQTFVTMgkJQklUKDMpCisjZGVmaW5lIFJHX0RTSV9MTlQyX0xQVFhfSU1J TlVTCQlCSVQoNCkKKyNkZWZpbmUgUkdfRFNJX0xOVDJfTFBDRF9JUExVUwkJQklUKDUpCisjZGVm aW5lIFJHX0RTSV9MTlQyX0xQQ0RfSU1JTlVTCQlCSVQoNikKKyNkZWZpbmUgUkdfRFNJX0xOVDJf UlRfQ09ERQkJKDB4ZiA8PCA4KQorCisjZGVmaW5lIE1JUElUWF9EU0lfREFUQV9MQU5FMwkweDE0 CisjZGVmaW5lIFJHX0RTSV9MTlQzX0xET09VVF9FTgkJQklUKDApCisjZGVmaW5lIFJHX0RTSV9M TlQzX0NLTEFORV9FTgkJQklUKDEpCisjZGVmaW5lIFJHX0RTSV9MTlQzX0xQVFhfSVBMVVMxCQlC SVQoMikKKyNkZWZpbmUgUkdfRFNJX0xOVDNfTFBUWF9JUExVUzIJCUJJVCgzKQorI2RlZmluZSBS R19EU0lfTE5UM19MUFRYX0lNSU5VUwkJQklUKDQpCisjZGVmaW5lIFJHX0RTSV9MTlQzX0xQQ0Rf SVBMVVMJCUJJVCg1KQorI2RlZmluZSBSR19EU0lfTE5UM19MUENEX0lNSU5VUwkJQklUKDYpCisj ZGVmaW5lIFJHX0RTSV9MTlQzX1JUX0NPREUJCSgweGYgPDwgOCkKKworI2RlZmluZSBNSVBJVFhf RFNJX1RPUF9DT04JMHg0MAorI2RlZmluZSBSR19EU0lfTE5UX0lOVFJfRU4JCUJJVCgwKQorI2Rl ZmluZSBSR19EU0lfTE5UX0hTX0JJQVNfRU4JCUJJVCgxKQorI2RlZmluZSBSR19EU0lfTE5UX0lN UF9DQUxfRU4JCUJJVCgyKQorI2RlZmluZSBSR19EU0lfTE5UX1RFU1RNT0RFX0VOCQlCSVQoMykK KyNkZWZpbmUgUkdfRFNJX0xOVF9JTVBfQ0FMX0NPREUJCSgweGYgPDwgNCkKKyNkZWZpbmUgUkdf RFNJX0xOVF9BSU9fU0VMCQkoNyA8PCA4KQorI2RlZmluZSBSR19EU0lfUEFEX1RJRV9MT1dfRU4J CUJJVCgxMSkKKyNkZWZpbmUgUkdfRFNJX0RFQlVHX0lOUFVUX0VOCQlCSVQoMTIpCisjZGVmaW5l IFJHX0RTSV9QUkVTRVJWRQkJCSg3IDw8IDEzKQorCisjZGVmaW5lIE1JUElUWF9EU0lfQkdfQ09O CTB4NDQKKyNkZWZpbmUgUkdfRFNJX0JHX0NPUkVfRU4JCUJJVCgwKQorI2RlZmluZSBSR19EU0lf QkdfQ0tFTgkJCUJJVCgxKQorI2RlZmluZSBSR19EU0lfQkdfRElWCQkJKDB4MyA8PCAyKQorI2Rl ZmluZSBSR19EU0lfQkdfRkFTVF9DSEFSR0UJCUJJVCg0KQorI2RlZmluZSBSR19EU0lfVk9VVF9N U0sJCQkoMHgzZmZmZiA8PCA1KQorI2RlZmluZSBSR19EU0lfVjEyX1NFTAkJCSg3IDw8IDUpCisj ZGVmaW5lIFJHX0RTSV9WMTBfU0VMCQkJKDcgPDwgOCkKKyNkZWZpbmUgUkdfRFNJX1YwNzJfU0VM CQkJKDcgPDwgMTEpCisjZGVmaW5lIFJHX0RTSV9WMDRfU0VMCQkJKDcgPDwgMTQpCisjZGVmaW5l IFJHX0RTSV9WMDMyX1NFTAkJCSg3IDw8IDE3KQorI2RlZmluZSBSR19EU0lfVjAyX1NFTAkJCSg3 IDw8IDIwKQorI2RlZmluZSBSR19EU0lfQkdfUjFfVFJJTQkJKDB4ZiA8PCAyNCkKKyNkZWZpbmUg UkdfRFNJX0JHX1IyX1RSSU0JCSgweGYgPDwgMjgpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9QTExf Q09OMAkweDUwCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9QTExfRU4JCUJJVCgwKQorI2RlZmluZSBS R19EU0lfTVBQTExfRElWX01TSwkJKDB4MWZmIDw8IDEpCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9Q UkVESVYJCSgzIDw8IDEpCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9UWERJVjAJCSgzIDw8IDMpCisj ZGVmaW5lIFJHX0RTSV9NUFBMTF9UWERJVjEJCSgzIDw8IDUpCisjZGVmaW5lIFJHX0RTSV9NUFBM TF9QT1NESVYJCSg3IDw8IDcpCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9NT05WQ19FTgkJQklUKDEw KQorI2RlZmluZSBSR19EU0lfTVBQTExfTU9OUkVGX0VOCQlCSVQoMTEpCisjZGVmaW5lIFJHX0RT SV9NUFBMTF9WT0RfRU4JCUJJVCgxMikKKworI2RlZmluZSBNSVBJVFhfRFNJX1BMTF9DT04xCTB4 NTQKKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9GUkFfRU4JCUJJVCgwKQorI2RlZmluZSBSR19E U0lfTVBQTExfU0RNX1NTQ19QSF9JTklUCUJJVCgxKQorI2RlZmluZSBSR19EU0lfTVBQTExfU0RN X1NTQ19FTgkJQklUKDIpCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9TRE1fU1NDX1BSRAkoMHhmZmZm IDw8IDE2KQorCisjZGVmaW5lIE1JUElUWF9EU0lfUExMX0NPTjIJMHg1OAorCisjZGVmaW5lIE1J UElUWF9EU0lfUExMX1BXUgkweDY4CisjZGVmaW5lIFJHX0RTSV9NUFBMTF9TRE1fUFdSX09OCQlC SVQoMCkKKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9JU09fRU4JCUJJVCgxKQorI2RlZmluZSBS R19EU0lfTVBQTExfU0RNX1BXUl9BQ0sJQklUKDgpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9TV19D VFJMCTB4ODAKKyNkZWZpbmUgU1dfQ1RSTF9FTgkJCUJJVCgwKQorCisjZGVmaW5lIE1JUElUWF9E U0lfU1dfQ1RSTF9DT04wCTB4ODQKKyNkZWZpbmUgU1dfTE5UQ19MUFRYX1BSRV9PRQkJQklUKDAp CisjZGVmaW5lIFNXX0xOVENfTFBUWF9PRQkJCUJJVCgxKQorI2RlZmluZSBTV19MTlRDX0xQVFhf UAkJCUJJVCgyKQorI2RlZmluZSBTV19MTlRDX0xQVFhfTgkJCUJJVCgzKQorI2RlZmluZSBTV19M TlRDX0hTVFhfUFJFX09FCQlCSVQoNCkKKyNkZWZpbmUgU1dfTE5UQ19IU1RYX09FCQkJQklUKDUp CisjZGVmaW5lIFNXX0xOVENfSFNUWF9aRVJPQ0xLCQlCSVQoNikKKyNkZWZpbmUgU1dfTE5UMF9M UFRYX1BSRV9PRQkJQklUKDcpCisjZGVmaW5lIFNXX0xOVDBfTFBUWF9PRQkJCUJJVCg4KQorI2Rl ZmluZSBTV19MTlQwX0xQVFhfUAkJCUJJVCg5KQorI2RlZmluZSBTV19MTlQwX0xQVFhfTgkJCUJJ VCgxMCkKKyNkZWZpbmUgU1dfTE5UMF9IU1RYX1BSRV9PRQkJQklUKDExKQorI2RlZmluZSBTV19M TlQwX0hTVFhfT0UJCQlCSVQoMTIpCisjZGVmaW5lIFNXX0xOVDBfTFBSWF9FTgkJCUJJVCgxMykK KyNkZWZpbmUgU1dfTE5UMV9MUFRYX1BSRV9PRQkJQklUKDE0KQorI2RlZmluZSBTV19MTlQxX0xQ VFhfT0UJCQlCSVQoMTUpCisjZGVmaW5lIFNXX0xOVDFfTFBUWF9QCQkJQklUKDE2KQorI2RlZmlu ZSBTV19MTlQxX0xQVFhfTgkJCUJJVCgxNykKKyNkZWZpbmUgU1dfTE5UMV9IU1RYX1BSRV9PRQkJ QklUKDE4KQorI2RlZmluZSBTV19MTlQxX0hTVFhfT0UJCQlCSVQoMTkpCisjZGVmaW5lIFNXX0xO VDJfTFBUWF9QUkVfT0UJCUJJVCgyMCkKKyNkZWZpbmUgU1dfTE5UMl9MUFRYX09FCQkJQklUKDIx KQorI2RlZmluZSBTV19MTlQyX0xQVFhfUAkJCUJJVCgyMikKKyNkZWZpbmUgU1dfTE5UMl9MUFRY X04JCQlCSVQoMjMpCisjZGVmaW5lIFNXX0xOVDJfSFNUWF9QUkVfT0UJCUJJVCgyNCkKKyNkZWZp bmUgU1dfTE5UMl9IU1RYX09FCQkJQklUKDI1KQorCitzdHJ1Y3QgbXRrX21pcGlfdHggeworCXN0 cnVjdCBkZXZpY2UgKmRldjsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJdW5zaWduZWQgaW50IGRh dGFfcmF0ZTsKKwlzdHJ1Y3QgY2xrX2h3IHBsbF9odzsKKwlzdHJ1Y3QgY2xrICpwbGw7Cit9Owor CitzdGF0aWMgdm9pZCBtdGtfbWlwaV90eF9tYXNrKHN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90 eCwgdTMyIG9mZnNldCwgdTMyIG1hc2ssCisJCQkgICAgIHUzMiBkYXRhKQoreworCXUzMiB0ZW1w ID0gcmVhZGwobWlwaV90eC0+cmVncyArIG9mZnNldCk7CisKKwl3cml0ZWwoKHRlbXAgJiB+bWFz aykgfCAoZGF0YSAmIG1hc2spLCBtaXBpX3R4LT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGlj IGludCBtdGtfbWlwaV90eF9wbGxfcHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1 Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBtdGtfbWlw aV90eCwKKwkJCQkJCSAgIHBsbF9odyk7CisJdW5zaWduZWQgaW50IHR4ZGl2LCB0eGRpdjAsIHR4 ZGl2MTsKKwl1NjQgcGN3OworCisJZGV2X2RiZyhtaXBpX3R4LT5kZXYsICJwcmVwYXJlOiAldSBI elxuIiwgbWlwaV90eC0+ZGF0YV9yYXRlKTsKKworCWlmIChtaXBpX3R4LT5kYXRhX3JhdGUgPj0g NTAwMDAwMDAwKSB7CisJCXR4ZGl2ID0gMTsKKwkJdHhkaXYwID0gMDsKKwkJdHhkaXYxID0gMDsK Kwl9IGVsc2UgaWYgKG1pcGlfdHgtPmRhdGFfcmF0ZSA+PSAyNTAwMDAwMDApIHsKKwkJdHhkaXYg PSAyOworCQl0eGRpdjAgPSAxOworCQl0eGRpdjEgPSAwOworCX0gZWxzZSBpZiAobWlwaV90eC0+ ZGF0YV9yYXRlID49IDEyNTAwMDAwMCkgeworCQl0eGRpdiA9IDQ7CisJCXR4ZGl2MCA9IDI7CisJ CXR4ZGl2MSA9IDA7CisJfSBlbHNlIGlmIChtaXBpX3R4LT5kYXRhX3JhdGUgPiA2MjAwMDAwMCkg eworCQl0eGRpdiA9IDg7CisJCXR4ZGl2MCA9IDI7CisJCXR4ZGl2MSA9IDE7CisJfSBlbHNlIGlm IChtaXBpX3R4LT5kYXRhX3JhdGUgPj0gNTAwMDAwMDApIHsKKwkJdHhkaXYgPSAxNjsKKwkJdHhk aXYwID0gMjsKKwkJdHhkaXYxID0gMjsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfQkdfQ09OLAorCQkJIFJH X0RTSV9WT1VUX01TSyB8IFJHX0RTSV9CR19DS0VOIHwgUkdfRFNJX0JHX0NPUkVfRU4sCisJCQkg KDQgPDwgMjApIHwgKDQgPDwgMTcpIHwgKDQgPDwgMTQpIHwKKwkJCSAoNCA8PCAxMSkgfCAoNCA8 PCA4KSB8ICg0IDw8IDUpIHwKKwkJCSBSR19EU0lfQkdfQ0tFTiB8IFJHX0RTSV9CR19DT1JFX0VO KTsKKworCXVzbGVlcF9yYW5nZSgzMCwgMTAwKTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90 eCwgTUlQSVRYX0RTSV9UT1BfQ09OLAorCQkJIFJHX0RTSV9MTlRfSU1QX0NBTF9DT0RFIHwgUkdf RFNJX0xOVF9IU19CSUFTX0VOLAorCQkJICg4IDw8IDQpIHwgUkdfRFNJX0xOVF9IU19CSUFTX0VO KTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9DT04sCisJCQkgUkdf RFNJX0NLR19MRE9PVVRfRU4gfCBSR19EU0lfTERPQ09SRV9FTiwKKwkJCSBSR19EU0lfQ0tHX0xE T09VVF9FTiB8IFJHX0RTSV9MRE9DT1JFX0VOKTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90 eCwgTUlQSVRYX0RTSV9QTExfUFdSLAorCQkJIFJHX0RTSV9NUFBMTF9TRE1fUFdSX09OIHwgUkdf RFNJX01QUExMX1NETV9JU09fRU4sCisJCQkgUkdfRFNJX01QUExMX1NETV9QV1JfT04pOworCisJ bXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04wLCBSR19EU0lfTVBQ TExfUExMX0VOLCAwKTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9Q TExfQ09OMCwKKwkJCSBSR19EU0lfTVBQTExfVFhESVYwIHwgUkdfRFNJX01QUExMX1RYRElWMSB8 CisJCQkgUkdfRFNJX01QUExMX1BSRURJViwKKwkJCSAodHhkaXYwIDw8IDMpIHwgKHR4ZGl2MSA8 PCA1KSk7CisKKwkvKgorCSAqIFBMTCBQQ1cgY29uZmlnCisJICogUENXIGJpdCAyNH4zMCA9IGlu dGVnZXIgcGFydCBvZiBwY3cKKwkgKiBQQ1cgYml0IDB+MjMgPSBmcmFjdGlvbmFsIHBhcnQgb2Yg cGN3CisJICogcGN3ID0gZGF0YV9SYXRlKjQqdHhkaXYvKFJlZl9jbGsqMik7CisJICogUG9zdCBE SVYgPTQsIHNvIG5lZWQgZGF0YV9SYXRlKjQKKwkgKiBSZWZfY2xrIGlzIDI2TUh6CisJICovCisJ cGN3ID0gKCh1NjQpbWlwaV90eC0+ZGF0YV9yYXRlICogMiAqIHR4ZGl2KSA8PCAyNDsKKwlwY3cg Lz0gMjYwMDAwMDA7CisJd3JpdGVsKHBjdywgbWlwaV90eC0+cmVncyArIE1JUElUWF9EU0lfUExM X0NPTjIpOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04x LAorCQkJIFJHX0RTSV9NUFBMTF9TRE1fRlJBX0VOLCBSR19EU0lfTVBQTExfU0RNX0ZSQV9FTik7 CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjAsCisJCQkg UkdfRFNJX01QUExMX1BMTF9FTiwgUkdfRFNJX01QUExMX1BMTF9FTik7CisKKwl1c2xlZXBfcmFu Z2UoMjAsIDEwMCk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfUExM X0NPTjEsCisJCQkgUkdfRFNJX01QUExMX1NETV9TU0NfRU4sIDApOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyB2b2lkIG10a19taXBpX3R4X3BsbF91bnByZXBhcmUoc3RydWN0IGNsa19odyAq aHcpCit7CisJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gY29udGFpbmVyX29mKGh3LCBz dHJ1Y3QgbXRrX21pcGlfdHgsCisJCQkJCQkgICBwbGxfaHcpOworCisJZGV2X2RiZyhtaXBpX3R4 LT5kZXYsICJ1bnByZXBhcmVcbiIpOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJ VFhfRFNJX1BMTF9DT04wLCBSR19EU0lfTVBQTExfUExMX0VOLCAwKTsKKworCW10a19taXBpX3R4 X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfUFdSLAorCQkJIFJHX0RTSV9NUFBMTF9TRE1f SVNPX0VOIHwgUkdfRFNJX01QUExMX1NETV9QV1JfT04sCisJCQkgUkdfRFNJX01QUExMX1NETV9J U09fRU4pOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX1RPUF9DT04s IFJHX0RTSV9MTlRfSFNfQklBU19FTiwgMCk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgs IE1JUElUWF9EU0lfQ09OLAorCQkJIFJHX0RTSV9DS0dfTERPT1VUX0VOIHwgUkdfRFNJX0xET0NP UkVfRU4sIDApOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0JHX0NP TiwKKwkJCSBSR19EU0lfQkdfQ0tFTiB8IFJHX0RTSV9CR19DT1JFX0VOLCAwKTsKKworCW10a19t aXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09OMCwgUkdfRFNJX01QUExMX0RJ Vl9NU0ssIDApOworfQorCitzdGF0aWMgbG9uZyBtdGtfbWlwaV90eF9wbGxfcm91bmRfcmF0ZShz dHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAorCQkJCSAgICAgICB1bnNpZ25l ZCBsb25nICpwcmF0ZSkKK3sKKwlyZXR1cm4gY2xhbXBfdmFsKHJhdGUsIDUwMDAwMDAwLCAxMjUw MDAwMDAwKTsKK30KKworc3RhdGljIGludCBtdGtfbWlwaV90eF9wbGxfc2V0X3JhdGUoc3RydWN0 IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBw YXJlbnRfcmF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBjb250YWluZXJf b2YoaHcsIHN0cnVjdCBtdGtfbWlwaV90eCwKKwkJCQkJCSAgIHBsbF9odyk7CisKKwlkZXZfZGJn KG1pcGlfdHgtPmRldiwgInNldCByYXRlOiAlbHUgSHpcbiIsIHJhdGUpOworCisJbWlwaV90eC0+ ZGF0YV9yYXRlID0gcmF0ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9u ZyBtdGtfbWlwaV90eF9wbGxfcmVjYWxjX3JhdGUoc3RydWN0IGNsa19odyAqaHcsCisJCQkJCQkg dW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlf dHggPSBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBtdGtfbWlwaV90eCwKKwkJCQkJCSAgIHBsbF9o dyk7CisJcmV0dXJuIG1pcGlfdHgtPmRhdGFfcmF0ZTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBjbGtfb3BzIG10a19taXBpX3R4X3BsbF9vcHMgPSB7CisJLnByZXBhcmUgPSBtdGtfbWlwaV90 eF9wbGxfcHJlcGFyZSwKKwkudW5wcmVwYXJlID0gbXRrX21pcGlfdHhfcGxsX3VucHJlcGFyZSwK Kwkucm91bmRfcmF0ZSA9IG10a19taXBpX3R4X3BsbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9 IG10a19taXBpX3R4X3BsbF9zZXRfcmF0ZSwKKwkucmVjYWxjX3JhdGUgPSBtdGtfbWlwaV90eF9w bGxfcmVjYWxjX3JhdGUsCit9OworCitzdGF0aWMgaW50IG10a19taXBpX3R4X3Bvd2VyX29uX3Np Z25hbChzdHJ1Y3QgcGh5ICpwaHkpCit7CisJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0g cGh5X2dldF9kcnZkYXRhKHBoeSk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElU WF9EU0lfQ0xPQ0tfTEFORSwKKwkJCSBSR19EU0lfTE5UQ19MRE9PVVRfRU4sIFJHX0RTSV9MTlRD X0xET09VVF9FTik7CisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0RBVEFf TEFORTAsCisJCQkgUkdfRFNJX0xOVDBfTERPT1VUX0VOLCBSR19EU0lfTE5UMF9MRE9PVVRfRU4p OworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9EQVRBX0xBTkUxLAorCQkJ IFJHX0RTSV9MTlQxX0xET09VVF9FTiwgUkdfRFNJX0xOVDFfTERPT1VUX0VOKTsKKwltdGtfbWlw aV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfREFUQV9MQU5FMiwKKwkJCSBSR19EU0lfTE5U Ml9MRE9PVVRfRU4sIFJHX0RTSV9MTlQyX0xET09VVF9FTik7CisJbXRrX21pcGlfdHhfbWFzayht aXBpX3R4LCBNSVBJVFhfRFNJX0RBVEFfTEFORTMsCisJCQkgUkdfRFNJX0xOVDNfTERPT1VUX0VO LCBSR19EU0lfTE5UM19MRE9PVVRfRU4pOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBN SVBJVFhfRFNJX1RPUF9DT04sIFJHX0RTSV9QQURfVElFX0xPV19FTiwgMCk7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBtdGtfbWlwaV90eF9wb3dlcl9vbihzdHJ1Y3QgcGh5ICpwaHkp Cit7CisJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7 CisJaW50IHJldDsKKworCS8qIFBvd2VyIHVwIGNvcmUgYW5kIGVuYWJsZSBQTEwgKi8KKwlyZXQg PSBjbGtfcHJlcGFyZV9lbmFibGUobWlwaV90eC0+cGxsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0 dXJuIHJldDsKKworCS8qIEVuYWJsZSBEU0kgTGFuZSBMRE8gb3V0cHV0cywgZGlzYWJsZSBwYWQg dGllIGxvdyAqLworCW10a19taXBpX3R4X3Bvd2VyX29uX3NpZ25hbChwaHkpOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyB2b2lkIG10a19taXBpX3R4X3Bvd2VyX29mZl9zaWduYWwoc3RydWN0 IHBoeSAqcGh5KQoreworCXN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9IHBoeV9nZXRfZHJ2 ZGF0YShwaHkpOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX1RPUF9D T04sIFJHX0RTSV9QQURfVElFX0xPV19FTiwKKwkJCSBSR19EU0lfUEFEX1RJRV9MT1dfRU4pOwor CisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0NMT0NLX0xBTkUsCisJCQkg UkdfRFNJX0xOVENfTERPT1VUX0VOLCAwKTsKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1J UElUWF9EU0lfREFUQV9MQU5FMCwKKwkJCSBSR19EU0lfTE5UMF9MRE9PVVRfRU4sIDApOworCW10 a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9EQVRBX0xBTkUxLAorCQkJIFJHX0RT SV9MTlQxX0xET09VVF9FTiwgMCk7CisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhf RFNJX0RBVEFfTEFORTIsCisJCQkgUkdfRFNJX0xOVDJfTERPT1VUX0VOLCAwKTsKKwltdGtfbWlw aV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfREFUQV9MQU5FMywKKwkJCSBSR19EU0lfTE5U M19MRE9PVVRfRU4sIDApOworfQorCitzdGF0aWMgaW50IG10a19taXBpX3R4X3Bvd2VyX29mZihz dHJ1Y3QgcGh5ICpwaHkpCit7CisJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gcGh5X2dl dF9kcnZkYXRhKHBoeSk7CisKKwkvKiBFbmFibGUgcGFkIHRpZSBsb3csIGRpc2FibGUgRFNJIExh bmUgTERPIG91dHB1dHMgKi8KKwltdGtfbWlwaV90eF9wb3dlcl9vZmZfc2lnbmFsKHBoeSk7CisK KwkvKiBEaXNhYmxlIFBMTCBhbmQgcG93ZXIgZG93biBjb3JlICovCisJY2xrX2Rpc2FibGVfdW5w cmVwYXJlKG1pcGlfdHgtPnBsbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0 cnVjdCBwaHlfb3BzIG10a19taXBpX3R4X29wcyA9IHsKKwkucG93ZXJfb24gPSBtdGtfbWlwaV90 eF9wb3dlcl9vbiwKKwkucG93ZXJfb2ZmID0gbXRrX21pcGlfdHhfcG93ZXJfb2ZmLAorCS5vd25l ciA9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGludCBtdGtfbWlwaV90eF9wcm9iZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2 LT5kZXY7CisJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4OworCXN0cnVjdCByZXNvdXJjZSAq bWVtOworCXN0cnVjdCBjbGsgKnJlZl9jbGs7CisJY29uc3QgY2hhciAqcmVmX2Nsa19uYW1lOwor CXN0cnVjdCBjbGtfaW5pdF9kYXRhIGNsa19pbml0ID0geworCQkub3BzID0gJm10a19taXBpX3R4 X3BsbF9vcHMsCisJCS5udW1fcGFyZW50cyA9IDEsCisJCS5wYXJlbnRfbmFtZXMgPSAoY29uc3Qg Y2hhciAqIGNvbnN0ICopJnJlZl9jbGtfbmFtZSwKKwkJLmZsYWdzID0gQ0xLX1NFVF9SQVRFX0dB VEUsCisJfTsKKwlzdHJ1Y3QgcGh5ICpwaHk7CisJc3RydWN0IHBoeV9wcm92aWRlciAqcGh5X3By b3ZpZGVyOworCWludCByZXQ7CisKKwltaXBpX3R4ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9m KCptaXBpX3R4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtaXBpX3R4KQorCQlyZXR1cm4gLUVOT01F TTsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwg MCk7CisJbWlwaV90eC0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIG1lbSk7CisJ aWYgKElTX0VSUihtaXBpX3R4LT5yZWdzKSkgeworCQlyZXQgPSBQVFJfRVJSKG1pcGlfdHgtPnJl Z3MpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgbWVtb3J5IHJlc291cmNlOiAlZFxu IiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZWZfY2xrID0gZGV2bV9jbGtfZ2V0KGRl diwgTlVMTCk7CisJaWYgKElTX0VSUihyZWZfY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKHJlZl9j bGspOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgcmVmZXJlbmNlIGNsb2NrOiAlZFxu IiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmVmX2Nsa19uYW1lID0gX19jbGtfZ2V0X25h bWUocmVmX2Nsayk7CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhkZXYtPm9mX25v ZGUsICJjbG9jay1vdXRwdXQtbmFtZXMiLAorCQkJCSAgICAgICZjbGtfaW5pdC5uYW1lKTsKKwlp ZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWFkIGNsb2NrLW91dHB1 dC1uYW1lczogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJbWlwaV90eC0+cGxs X2h3LmluaXQgPSAmY2xrX2luaXQ7CisJbWlwaV90eC0+cGxsID0gZGV2bV9jbGtfcmVnaXN0ZXIo ZGV2LCAmbWlwaV90eC0+cGxsX2h3KTsKKwlpZiAoSVNfRVJSKG1pcGlfdHgtPnBsbCkpIHsKKwkJ cmV0ID0gUFRSX0VSUihtaXBpX3R4LT5wbGwpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBy ZWdpc3RlciBQTEw6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBoeSA9IGRl dm1fcGh5X2NyZWF0ZShkZXYsIE5VTEwsICZtdGtfbWlwaV90eF9vcHMpOworCWlmIChJU19FUlIo cGh5KSkgeworCQlyZXQgPSBQVFJfRVJSKHBoeSk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRv IGNyZWF0ZSBNSVBJIEQtUEhZOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcGh5 X3NldF9kcnZkYXRhKHBoeSwgbWlwaV90eCk7CisKKwlwaHlfcHJvdmlkZXIgPSBkZXZtX29mX3Bo eV9wcm92aWRlcl9yZWdpc3RlcihkZXYsIG9mX3BoeV9zaW1wbGVfeGxhdGUpOworCWlmIChJU19F UlIocGh5KSkgeworCQlyZXQgPSBQVFJfRVJSKHBoeV9wcm92aWRlcik7CisJCXJldHVybiByZXQ7 CisJfQorCisJbWlwaV90eC0+ZGV2ID0gZGV2OworCisJcmV0dXJuIG9mX2Nsa19hZGRfcHJvdmlk ZXIoZGV2LT5vZl9ub2RlLCBvZl9jbGtfc3JjX3NpbXBsZV9nZXQsCisJCQkJICAgbWlwaV90eC0+ cGxsKTsKK30KKworc3RhdGljIGludCBtdGtfbWlwaV90eF9yZW1vdmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKK3sKKwlvZl9jbGtfZGVsX3Byb3ZpZGVyKHBkZXYtPmRldi5vZl9ub2Rl KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRr X21pcGlfdHhfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1t aXBpLXR4IiwgfSwKKwl7fSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX21pcGlf dHhfZHJpdmVyID0geworCS5wcm9iZSA9IG10a19taXBpX3R4X3Byb2JlLAorCS5yZW1vdmUgPSBt dGtfbWlwaV90eF9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibWVkaWF0ZWstbWlw aS10eCIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19taXBpX3R4X21hdGNoLAorCX0sCit9Owot LSAKMi43LjAucmMzCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZl bAo=